본문 바로가기
반응형

분류 전체보기232

R 문자열을 변수명으로 사용하는 방법 R 문자열을 변수명으로 사용하는 방법 R을 사용하다 보면 문자열을 변수명으로 사용해야 하는 경우가 종종 발생합니다. 제 경우는 함수나 그래프에 formula 를 입력하는 상황이었습니다. 예를들어 t검정을 한다고 합시다. t.test(y~x,data=mydata) 여기서 x값을 바꿔가면서 for문을 돌리고 싶었습니다. 예를들면 X자리에 P1, P2, P3 를 for문으로 넣고 싶은 상황입니다. x=c("P1","P2","P3) 로 정의하고, for문에 x[i] 로 넣을 경우 문자형으로 인식이 되서 오류가 뜹니다. 이럴 경우 사용하는 함수는 parse와 eval입니다. 아래와 같이 사용합니다. eval(parse(text = x[i])) 쉬운 예를 들면 아래와 같습니다 . > a=3> eval(parse(t.. 2020. 10. 7.
[R기초] 조건에 맞는 원소의 위치를 반환 (which 함수) [R기초] 조건에 맞는 원소의 위치를 반환 (which 함수) 1. 벡터 벡터와 비교연산자를 이용하여 조건을 대입하면, 해당 조건에 만족하는 원소의 위치를 반환합니다. > a=c(1,2,3,1,2,3) > which(a==3)[1] 3 6 > which(a>1)[1] 2 3 5 6 2. 데이터프레임 데이터프레임도 벡터와 원리는 같습니다. arr.ind 옵션을 TRUE로 설정하면 해당 원소의 행의 위치와 열의 위치를 각각 반환합니다. > df=data.frame(c1=c(1,2,3),c2=c(1,1,3),c3=c(1,2,2))> df c1 c2 c31 1 1 12 2 1 23 3 3 2 > which(df==1)[1] 1 4 5 7 > which(df==1,arr.ind=TRUE) row col[1,] 1.. 2020. 10. 5.
[R기초] 특정한 값과 일치하는 경우 TRUE 반환 (%in% 연산자) [R기초] 특정한 값과 일치하는 경우 TRUE 반환 (%in% 연산자) %in% 연산자는 특정 값과 일치하는 경우에는 TRUE, 일치하지 않는 경우 FALSE를 반환하는 연산자입니다. 사용방법은 아래와 같습니다. > a=1:10> a %in% c(1,2,3) [1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 2020. 10. 5.
[R기초] 모든 문자를 대문자 또는 소문자로 바꿔주는 함수 [R기초] 모든 문자를 대문자 또는 소문자로 바꿔주는 함수 1. 모든 문자를 대문자로 toupper 함수를 사용합니다. > a="hello"> toupper(a)[1] "HELLO" 2. 모든 문자를 소문자로 tolower 함수를 사용합니다. > b="HELLO"> tolower(b)[1] "hello" 2020. 10. 5.
[R기초] 도움말 검색방법 (함수, 패키지 등) [R기초] 도움말 검색방법 (함수, 패키지 등) 1. 함수 도움말 함수에 대한 설명을 보고 싶은 경우 help 함수를 이용합니다. 예를들어 평균을 구해주는 mean 함수의 설명을 보고 싶으면 아래 명령어를 입력합니다. > help(mean) 또는 함수 앞에 물음표를 붙여도 됩니다. > ?mean 2. 패키지 도움말 패키지 도움말도 help 함수를 이용합니다. 다만 package 라는 명시를 해주어야 합니다. 예를들어 dplyr 패키지의 도움말을 보고 싶으면 아래 명령어를 입력합니다. > help(package="dplyr") 2020. 10. 5.
[R기초] 문자열을 특정 기준으로 쪼개기 [R기초] 문자열을 특정 기준으로 쪼개기 strsplit(문자열,쪼개는 기준) > a="This is my apple"> strsplit(a," ")[[1]][1] "This" "is" "my" "apple" 2020. 10. 5.
[R기초] 데이터 생성하기 (rep, seq 함수) [R기초] 데이터 생성하기 (rep, seq 함수) 1. rep 함수 rep는 반복한다는 의미인 repeat의 약어입니다. 두가지 사용법이 있습니다. rep(반복할 변수, times=전체 반복 횟수) times는 생략이 가능합니다. > rep(3,10) [1] 3 3 3 3 3 3 3 3 3 3 다른 방법은 each 옵션을 사용하는 것입니다. rep(반복할 변수, each=각 원소 반복 횟수) > rep(c(1,3),each=3)[1] 1 1 1 3 3 3 2. seq 함수 seq는 수열을 의미하는 sequence의 약어입니다. seq(시작값, 종료값, 간격) > seq(1,10,3)[1] 1 4 7 10 2020. 10. 5.
[R 조건문] While문 [R 조건문] While문 while문은 조건이 만족하지 않을 때까지, 내용을 반복해서 실행하도록 하는 반복문입니다. 아래와 같은 형태로 사용합니다. while(조건) {실행 내용} 예를들어봅시다. i 가 10보다 작은 동안 구문을 실행하도록 하겠습니다. i=1 while(i while(i 2020. 9. 29.
[R] apply 함수를 이용하여 이항 데이터로 변형하기 데이터프레임의 원소들을 한번에 이항데이터로 변경하는 방법입니다. 1) NA 여부에 따른 분류 먼저 데이터프레임을 하나 정의합시다. c1=c(1,2,3,NA,NA)c2=c(NA,NA,2,3,5)c3=c(3,NA,1,NA,6)df=data.frame(c1,c2,c3) > df c1 c2 c31 1 NA 32 2 NA NA3 3 2 14 NA 3 NA5 NA 5 6 NA와 NA가 아닌데이터 둘로 구분할 것입니다. NA인 경우를 FALSE, NA가 아닌 경우를 TRUE로 만들어봅시다. df_lgst=!(is.na(df_lgst)) > df_lgst c1 c2 c3[1,] TRUE FALSE TRUE[2,] TRUE FALSE FALSE[3,] TRUE TRUE TRUE[4,] FALSE TRUE FALSE[5,.. 2020. 9. 28.
[R 기초] 함수를 별도의 스크립트로 읽어오기 [R 기초] 함수를 별도의 스크립트로 읽어오기 함수가 긴 경우 외부 파일에 함수를 정의하고 스크립트에서 읽어오는 방법이 있습니다. 먼저 함수를 정의해야 하는데요. R에서 [File]-[New File]-[R Script] 로 새 창을 열어서 함수를 정의하시고 저장하셔도 되구요. 메모장에다 함수를 쓰고 저장하시고, 확장자만 R로 하시면 됩니다. 저장하실 때 파일 이름과 함수 이름을 동일하게 해주셔야 합니다. 안그러면 error가 발생합니다. 불러오실 때는, working directory에 파일이 있는 경우에는 아래와 같이 불러옵니다. 파일 이름이 my_fun.R 이라고 합시다. source("my_fun.R") 만약 함수가 working directory에 있지 않은 경우, working director.. 2020. 9. 26.
[R기초] apply 함수 (행, 열, 또는 각 원소에 함수를 일괄적용) [R기초] apply 함수 (행, 열, 또는 각 원소에 함수를 일괄적용) 먼저 데이터프레임을 하나 만들어봅시다. > myd=cbind(r1=1:10,r2=101:110,r3=1001:1110)> head(myd) r1 r2 r3[1,] 1 101 1001[2,] 2 102 1002[3,] 3 103 1003[4,] 4 104 1004[5,] 5 105 1005[6,] 6 106 1006 1) 가로 방향 일괄적용 (평균) 가로 방향의 평균을 구해봅시다. 아래와 같은 형식으로 입력합니다. apply(데이터,방향,함수) 방향은 1이 가로방향, 2가 세로방향입니다. > apply(myd,1,mean) [1] 367.6667 368.6667 369.6667 370.6667 371.6667 372.6667 373... 2020. 9. 23.
[R기초] 리스트는 언제 사용할까? [R기초] 리스트는 언제 사용할까? R을 공부하다 보면 자료구조라는 것을 배우게 됩니다. 자료를 담는 그릇인데 아래와 같은 것들이 있습니다. - 벡터- 행렬- 배열- 리스트- 요인- 데이터프레임- 테이블 이들 중 "이건 왜있지?" 라는 생각이 드는 자료구조가 있었습니다. 바로 '리스트'입니다. 지금은 R 초보자는 벗어났다고 생각하는데, 초보 시절에는 리스트의 존재 이유를 알기가 어려웠습니. 따라서 거의 사용하지도 않았습니다. 지금은 없어서는 안될 존재입니다. 오늘은 내가 경험한 리스트의 용도 중 하나를 공유하려고 합니다. 상황을 하나 가정하겠습니다. 10개의 벡터를 만들어야 하는 상황입니다. 10개의 벡터를 만들고 각각의 벡터에 0과 10사이의 임의의 숫자 5개를 넣으려고 합니다. 아래와 같은 코드를 짜.. 2020. 9. 16.
[R 기초] 리스트 인덱싱 하는 방법 [R 기초] 리스트 인덱싱 하는 방법 먼저 리스트를 하나 정의하겠습니다. 벡터 두개와 데이터프레임하나를 넣었습니다. v1=c(1,2,3)v2=c("a","b","c")d1=data.frame(v1,v2) mylist=list(v1,v2,d1) 아래와 같이 생성되었습니다. > mylist[[1]][1] 1 2 3 [[2]][1] "a" "b" "c" [[3]] v1 v21 1 a2 2 b3 3 c 리스트 인덱싱은 크게 세가지가 있는데요. 리스트 자체를 인덱싱하는 방법과, 구성요소에 접근하는 방법과, 구성요소의 원소에 접근하는 방법입니다. 1) 리스트 인덱싱 첫번째 리스트에 접근해보겠습니다. > mylist[1][[1]][1] 1 2 3 이렇게 접근할 경우 자료형은 list가 됩니다. 첫번째 리스트와 두번째.. 2020. 9. 16.
[R] table 형태를 유지하며 데이터프레임으로 [R] table 형태를 유지하며 데이터프레임으로 먼저 테이블을 하나 만들어봅시다. v1=c("F","F","M","M","M") v2=c("A","B","C","A","B") d=data.frame(v1,v2) t=table(d) > t v2 v1 A B C F 1 1 0 M 1 1 1 이 형태를 그대로 데이터 프레임으로 만들고 싶은데요. as.data.frame을 적용하면 아래와 같이 변형됩니다. > as.data.frame(t) v1 v2 Freq 1 F A 1 2 M A 1 3 F B 1 4 M B 1 5 F C 0 6 M C 1 이때는 as.data.frame.matrix 함수를 사용하면 됩니다. > as.data.frame.matrix(t) A B C F 1 1 0 M 1 1 1 2020. 8. 31.
[R] 분할표를 자동으로 만들어주는 table 함수 [R] 분할표를 자동으로 만들어주는 table 함수 table 함수는 범주형 자료의 분할표를 만들 때 사용됩니다. 예를들어 아래 벡터가 있다고 합시다. v=c("F","F","M","M","M") table 함수를 적용하면 아래와 같습니다. > table(v) v F M 2 3 위 경우는 변수가하나인 경우입니다. 변수가 2개인 경우도 살펴봅시다. v1=c("F","F","M","M","M") v2=c("A","B","C","A","B") d=data.frame(v1,v2) > table(d) v2 v1 A B C F 1 1 0 M 1 1 1 2020. 8. 31.
[R] 01,02,03,.. 형태의 벡터 만들기 [R] 01,02,03,.. 형태의 벡터 만들기 01,02,03,04...와 같은 벡터를 만드는 방법입니다. sprintf 함수를 사용합니다. ex) 01~50 까지의 벡터 num=sprintf("%02d", 1:50) 2020. 7. 29.
[R] next 명령어 (for문에서 해당 조건 만족시 스킵) next 명령어는 for 문에서 특정 조건을 만족하는 경우 명령문을 실행 안하고 넘길 때 사용합니다. if문과 함께 사용하면 됩니다. 아래 예시는 i가 4인 경우에만 명령문을 실행하지 않도록 한 for문입니다. for (i in 1:5) { if (i==4) { next } print (i) } 2020. 6. 14.
R 논리연산자 R 논리연산자 이름코드 입력방법 기능 설명 AND& shift+7 논리합 벡터의 모든 원소 고려 && 벡터의 첫번째 원소만 고려 OR| shift+\ 논리곱 벡터의 모든 원소 고려 벡터의첫번째 원소만 고려 NOT! shift+1논리 부정 XORxor( , ) 배타적 논리합 둘 중 하나만 거짓일 경우 TRUE 사용예 : if 문 if문의 조건으로 비교연산자와 함께 사용 a=3b=5 if ((a>1)&(b if ((a>1)&(b 2020. 6. 14.
R 역순으로 배열하는 함수 R 역순으로 배열하는 함수 백터 원소를 역순으로 배열할 때는 rev함수를 사용합니다. > a=c(1,2,3,4,5) > rev(a) [1] 5 4 3 2 1 2020. 5. 29.
R 문자열에서 특정 문자/특수문자를 변경,제거하는 방법 R 문자열에서 특정 문자/특수문자를 변경,제거하는 방법 1) 특정 문자를 다른 문자로 변경 gsub("a", "b", data) > data="a123bb" > data=sub("a","k",data) > data [1] "k123bb" 2) 특정 문자를 제거 gsub("a", "", data) 4) 모든 특수문자 제거 gsub("[[:punct:]]", "", data) 5) 특정 특수문자만 제거 gsub("[\\$,]", "", data) 2020. 5. 16.
R에서 생성된 변수 목록을 확인하는 방법 R에서 생성된 변수 목록을 확인하는 방법 ls() 함수를 사용합니다. 아래는 예시입니다. > a=c(1,2,3) > b=c(4,5,6) > c=c(7,8,9) > ls() [1] "a" "b" "c" 2020. 5. 16.
R 데이터 수 확인하는 함수 총집합(length, dim, nrow, ncol) R 데이터 수 확인하는 함수 총집합(length, dim, nrow, ncol) 데이터의 수를 확인하는 함수는 네가지가 있습니다. 각함수의 의미를 먼저 간단히 알아봅시다. length : 길이 반환 dim : 차원반환 nrow : 행의 수 반환 ncol : 열의 수 반환 자료구조 별로 사용하는 함수가 다릅니다. 각각 알아봅시다. 1. 벡터, 요인의 데이터 수 확인 벡터의 데이터 수는 length 함수를 사용하면 알 수 있습니다. 나머지 함수들을 적용하면 어떻게 되는지도 알아봅시다. > vec=c(1,2,3,4,5) > length(vec) [1] 5 > dim(vec) NULL > nrow(vec) NULL > ncol(vec) NULL 요인(factor)도 벡터와 동일합니다. > fac=gl(2,3,l.. 2020. 5. 16.
R에서 숫자 혹은 문자만 분리하는 방법 (ab123 -> ab 혹은 ab123 -> 123) R에서 숫자 혹은 문자만 분리하는 방법 (ab123 -> ab 혹은 ab123 -> 123) gsub 함수를 사용합니다. 방법은 아래와 같습니다. 1) 숫자만 분리 > x="ab123" > gsub('\\D','', x) [1] "123" 숫자로 저장해봅시다. > x="ab123" > x_num=as.numeric(gsub('\\D','', x)) > x_num [1] 123 2) 문자만 분리 > x="ab123" > gsub('\\d','', x) [1] "ab" 2020. 5. 12.
R 데이터프레임 인덱싱을 파라미터로 접근하기 R 데이터프레임 인덱싱을 파라미터로 접근하기 데이터프레임의 인덱싱 방법은 크게 두가지가 있습니다. $를 사용하는 방법과 [ ]을 사용하는 방법입니다. 물론 함께 사용할 수도 있습니다. 둘의 차이를 간단히 알아봅시다. 먼저 데이터프레임을 하나 만들어봅시다. > myd=data.frame(A=c(90,84,66,35),B=c(96,46,73,62),C=c(77,57,46,36)) > myd A B C 1 90 96 77 2 84 46 57 3 66 73 46 4 35 62 36 한 반의 학생이 4명인 A,B,C반의 수학점수입니다. $을 이용하여 A반에 접근해봅시다. > myd_A=myd$A > typeof(myd_A) [1] "double" 벡터가 반환됩니다. 이번에는 [ ] 을 이용하여 접근해봅시다. > .. 2020. 4. 28.
R 지수표기법을 일반표기법으로 바꾸는 방법 숫자를 표기하는 방법은 일반표기법과 지수표기법이 있습니다. 두 방법의 차이는 아래 예시를 통해 쉽게 구분하실 수 있습니다. 일반 표기법(standard notation) : 100, 0.02 지수표기법(exponential notation) : 1e^2, 1e-2 일반표기법은 고정표기법(fixed notation)이라고도 부릅니다. 지수표기법은 과학표기법(scientific notation)이라고도 부릅니다. R에서 표기법을 설정하는 방법입니다. options 함수의 scipen 옵션을 사용하면 됩니다. 양수를 입력하면 일반표기법, 음수를 입력하면 지수표기법입니다. 충분히 큰 숫자를 입력해야합니다. options(scipen=500) options(scipen=-500) 아래는 예시입니다. > optio.. 2020. 4. 24.
R 데이터프레임 행이름 리셋하는 법 R 데이터프레임 행이름 리셋하는 법 먼저 데이터프레임을 하나 정의합시다. a=1:5b=11:15c=101:105 mydata=data.frame(a,b,c) 정의한 데이터프레임은 아래와 같습니다. > mydata a b c1 1 11 1012 2 12 1023 3 13 1034 4 14 1045 5 15 105 이 데이터프레임의 1,3,5행을 mydata2라는 데이터프레임에 입력하겠습니다. mydata2=mydata[c(1,3,5),] 결과는 아래와 같습니다. 행 이름도 1,3,5가 되어 있는 것을 알 수 있습니다. > mydata2 a b c1 1 11 1013 3 13 1035 5 15 105 행 이름을 1,2,3으로 리셋하려면, 아래와 같은 코드를 입력하면 됩니다. rownames(mydata2)=.. 2020. 4. 6.
R 조건문 if문, if else 문, if else if else 문 R 조건문 if문, if else 문, if elif else 문 1. if문 R에서 if문은 아래와 같은 형식으로 입력합니다. if (조건) {실행내용} a가 3보다 작으면 a if (a 2020. 4. 3.
R 배열(array)정의, 이름 지정 R 배열(array)정의, 이름 지정 배열은 행렬과 벡터를 포함하는 개념입니다. 벡터는 1차원 배열이고, 행렬은 2차원 배열입니다. 배열은 n차원까지 정의가 가능합니다. 배열은 array 함수를 이용하여 정의합니다. 행렬에서는 nrow 또는 ncol을 이용하여 행 또는열의 수를 지정했습니다. 배열에서는 각 차원에 나열될 줄 수를 정의해야합니다. 1. array 함수로 벡터 정의 먼저 배열을 이용하여 벡터를 정의하는 것으로 시작합시다. 원소가 4개인 벡터를 정의하겠습니다. > v1=array(c(1,2,3),dim=c(3))> v1[1] 1 2 3 dim=c(3)은 1차원이고 줄 수가 3개라는 말입니다. 괄호 안에 있는 수의 개수가 차원이고, 수의 값이 줄 수 입니다. 방금 정의된 벡터는 열벡터일까요 행벡.. 2020. 1. 31.
R 행렬 인덱싱, 원소 추가/수정/제거 R 행렬 인덱싱, 원소 추가/수정/제거 1. 행렬의 인덱싱 행렬을 하나 정의합시다. > m1=matrix(c(1,2,3,4,5,6),nrow=2)> m1 [,1] [,2] [,3][1,] 1 3 5[2,] 2 4 6 인덱싱 원리는 벡터와 동일한데, 방향이 하나 추가된 것입니다. 행방향 index와 열방향 index가 있습니다. 아래와 같이 입력합니다. 행렬이름[행방향 index, 열방향 index] 1) 단일 원소 위 행렬의 1행2열 원소에 접근해봅시다. > m1[1,1][1] 1 1행 2열의 원소에 접근해봅시다. > m1[1,2][1] 3 2) 여러원소 벡터형태로 인덱스를 입력하면 됩니다. 1행의 2,3열의 원소에 접근해봅시다. > m1[1,c(2,3)][1] 3 5 아래와 같이 입력해도 됩니다. > .. 2020. 1. 30.
R 벡터의 인덱싱, 원소 추가/수정/제거 R 벡터의 인덱싱, 원소 추가/수정/제거 1. 인덱싱 벡터를 하나 정의합시다. > a=c(1,2,3,4,5)> a[1] 1 2 3 4 5 1) 단일원소 원소에 접근하는 방법은 대괄호 [ ] 를 이용하는 것입니다. 예를 들어 첫번째 원소에 접근한다면 아래와 같이 입력하면 됩니다. > a[1][1] 1 여기에 입력된 1을 index라고 합니다. 2) 범위 index를 구간으로 입력할 수도 있습니다. 1부터 3까지의 원소에 접근해봅시다. > a[1:3][1] 1 2 3 1:3이 마치 새로운 기호처럼 보이는데, c(1,2,3)인 벡터와 같습니다. 아래와 같이 입력해도 됩니다. > a[c(1,2,3)][1] 1 2 3 위 원리를 이용하여 1,3,5번째 원소에 접근해봅시다. > a[c(1,3,5)][1] 1 3 5.. 2020. 1. 29.
반응형