R의 문자열 처리 및 비교


문자열 길이 알아내기

nchar

문자열 연결 하기

paste("Everybody", "loves", "you.")

비칸을 이용해서 합쳐지며, 다른 문자를 쓰고 싶으면 seq="" 옵션을 이용 한다.

하위 문자열 추출 하기

substr(string,start,end)

string에서 strat에서 시작하고 end에서 끝나는 문자열을 추출 한다.

구분자료 문차열 추출

strsplit(문자열, 구분자)
반환값은 리스트이고
각각의 리스트 원소들은 백터이다.
이렇게 두개의 수준으로 된 구조가 필요한 이유는 
첫 인자가 문자열로 된 백터일 수 있기 때문이다.
각 문자열은 자신의 하위 문자열들(백터)로 분할 된다.
그리고 나서 이 벡터들이 리스트로 반환되는 것이다.

> path <- "/home/mike/data/trials.csv"
> strsplit(path,"/")
[[1]]
[1] ""           "home"       "mike"       "data"       "trials.csv"
> paths <- c("/home/mike/data/trials.csv","/home/mike/data/data.csv","/home/mike/data/error.csv") 
> path <- "/home/mike/data/trials.csv"
> strsplit(paths,"/")
[[1]]
[1] ""           "home"       "mike"       "data"       "trials.csv"

[[2]]
[1] ""         "home"     "mike"     "data"     "data.csv"

[[3]]
[1] ""          "home"      "mike"      "data"      "error.csv"

하위 문자열 대체하기

sub(old,new,string)
첫 번째 하위 문자열을 대체한다.

gsub(old,new,string)
모든 하위 문자열을 대체한다.

정규 표현식을 없앨려면 fixed = TRUE 옵션을 사용 한다.

문자열 특수문자 보기

cat

문자열의 모든 쌍별 조합 생성

m <- outer(문자열1, 문자열2, paste, seq="")

문자열 비교하는 함수

가능한 함수는 아래와 같고
grepgreplregexprgregexprregexec

grep을 이용해서 
어떤 패턴의 문자열을 
원하는 문자로 변경하는 방법은 아래와 같다.

#아래와 같은 샘플이 있다고 가정하자.
Sample <- c("BU1", "BU2", "BM1", "BD1", "BU3") 

#grep을 수행 할 경우
> grep("^BU", Sample) 
c(1,2,5)

> section <- character(length(Sample)) 
> section[grepl("^BU", Sample)] <- "up" 
> section[grepl("^BM", Sample)] <- "mid" 
> section[grepl("^BD", Sample)] <- "down" 
> section
[1] "up"   "up"   "mid"  "down" "up"

# mapping 방식을 이용한 것도 있다.
# 방법 1
map <- c(BU="up", BM="mid", BD="down") 
section <- unname(map[substring(Sample, 1, 2)]) 
section
[1] "up"   "up"   "mid"  "down" "up" 

# 방법 2
from <- c("BU", "BM", "BD") 
to <- c("up", "mid", "down") 
section <- to[match(substring(Sample,1,2), from)] 
section
[1] "up"   "up"   "mid"  "down" "up"  

IF 와 grep을 혼용해서 사용하는 방법

if(length(grep(x,y))==0)
any(grep(x,y))

반복문을 돌면서 두개의 문자열이 같은지 비교하는 코드

pmatch를 이용한다.

sapply(1:length(singleplace$V1), function(x){

    #pmatch(singleplace$V1[x],multieplace$V1[x])
    pmatch(singleplace$V2[x],multieplace$V2[x])
}
)

기타 Match함수로는 아래의 것들이 있다.

> as.logical(match(x,1,nomatch=FALSE))
[1] FALSE
> 1:10 %in% c(1,3,5,9)
 [1]  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE


Plyr package (데이터 조작)


plyr는 reshape2와 마찬가지로 Hadley Wickham에 의해서 개발 되었다.
2011년에 해당 논문이 아래와 같이 출간되었다.

The split-apply-combine strategy for data analysis(2011, Journal of Statistical Software, Vol 40).

데이터들을 쪼개고, 일부부늘 취하며, 어떤 특정 함수를 특정 부분에 적용하고
그리고 결과들을 조합하는 향상된 기능을 제공하는 패키지이다.

그 밖에도
loop의 재배치를 제공한다.

로드법

install.packages("plyr")
library(plyr)

apply 종류가 많다. 하지만 데이터 프레임을 위한것은 없다.
이때 plyr package에 있는 ddply를 이용한다.

함수 제공 형태

  • 배열(a)
  • 데이터 프레임(d)
  • 리스트(l)
  • _는 아무런 출력도 내보내지 않음을 의미함.
{adl}{adl_}ply
입력 데이터 타입출력 데이터 타입

유용한 함수: adply()ddply()mdply()
유용한 유틸리티 함수: transform()mutate()summarise()subset()

Adply()

Adply()는 배열(a)를 받아 데이터 프레임(d)을 반환하는 함수이다. 
입력이 반드시 배열일 필요는 없고 숫자 색인으로 접근 가능 하기만 하면된다.
따라서 데이터 프레임도 입력으로 사용이 가능하다.

apply()의 단점인 문자열 데이터가 섞여 있다면 데이터가 모두 문자열로 반환된다는 점을 개선한 것이다.

adply(
.data, # 행렬, 배열, 또는 데이터 프레임
# 함수를 적용할 방향. 1(행 방향), 2(열 방향) 또는 c(1,2) 행과 열의 모든 방향을 지정 한다.
.margins,
.fun=NULL # .margin 방향으로 잘려진 데이터에 적용할 함수

반환 값은 데이터 프레임이다.

apply와 유사하지만 반환 값이 데이터 프레임이라는 차이가 있다.

예제

#적용 전
 Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
adply(iris, 1 , function(row){ row$Sepal.Length >= 5.0 & row$Species == "setosa"})

    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species    V1
1            5.1         3.5          1.4         0.2     setosa  TRUE
2            4.9         3.0          1.4         0.2     setosa FALSE
3            4.7         3.2          1.3         0.2     setosa FALSE

예제: 컬럼에 이름 부여

adply(iris, 1 , function(row)
{ 
    data.frame( sepal_ge_5_setosa = c(row$Sepal.Length >= 5.0 & row$Species == "setosa"))
}
)

    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species sepal_ge_5_setosa
1            5.1         3.5          1.4         0.2     setosa              TRUE
2            4.9         3.0          1.4         0.2     setosa             FALSE

Ddply()

ddply()는 데이터 프레임(d)을 입력으로 받아 데이터 프레임(d)을 내보내는 함수 이다.

ddply(
.data,
.variables, #데이터를 그룹 지을 변수명
.fun=NULL
)

반환 값은 데이터 프레임이다.

adply()와 ddply()의 가장 큰 차이점이라면 adply()는 행 또는 컬럼 단위로 함수를 적용하는 반면
ddply()는 .variables에 나열한 컬럼에 따라 데이터를 나눈 뒤 함수를 적용한다는 점이다.

아래와 같이.()안의 컬럼으로 데이터를 묶은 다음에 function안에 있는 함수를 적용 하게 된다.
데이터 프레임의 컬럼의 이름은 sepal.width.mean이며, 각 Species에 대해서 묶고 그것들의 Sepal.Width의 평균을 구하는 코드이다.

ddply(iris, .(Species), function(sub){
    data.frame(sepal.width.mean = mean(sub$Sepal.Width))
})
     Species sepal.width.mean
1     setosa            3.428
2 versicolor            2.770
3  virginica            2.974

추가 조건을 기입한 예제는 아래와 같다.

ddply(iris, .(Species, Sepal.Length > 5.0), function(sub){
    data.frame(sepal.width.mean = mean(sub$Sepal.Width))
})

     Species Sepal.Length > 5 sepal.width.mean
1     setosa            FALSE         3.203571
2     setosa             TRUE         3.713636
3 versicolor            FALSE         2.233333
4 versicolor             TRUE         2.804255
5  virginica            FALSE         2.500000
6  virginica             TRUE         2.983673

Mdply()

m{adl_}ply(), 즉 maply()mdply()mlply()m_ply()함수는 데이터 프레임 또는 
배열을 인자로 받아 각 컬럼을 주어진 함수에 적용하고 그 실행 결과들을 조합한다.
여기서는 이들 중 mdply()에 대해서 살펴본다.

plyr::mdply(
.data, # 인자로 사용할 행렬 또는 데이터 프레임
.fun, # 호출할 함수
)
# 반환 값은 데이터 프레임이다.

Transform, Mutate, Summarise, Subset

데이터 프레임을 반환 한다.

base::transform( 
.data # 변환할 객체
...   # 태그=값 형태의 인자들
)

데이터 프레임 _data에 ...에 지정한 연산을 수행한 뒤 그 결과를 지정한 새로운 컬럼을 추가한 데이터 프레임을 반환한다.

데이터 프레임에 새로운 컬럼을 추가하거나 기존 컬럼을 수정 한다.

plyr::mutate(
.data, # 변환할 데이터 프레임
... # 새로운 컬럼 정의. 컬럼명 = 값 형식
)

변환이 이루어진다는 점은 transform()과 같지만 컬럼명=값 형태로 지정된 연산이 여러 개 있을 때 앞서의 연산 결과를 뒤에 나오는 연산에서 참조할 수 있다는 차이가 있다.

plyr:summarise: 데이터 프레임을 요약 한다.

plyr::summarise(
.data, # 요약할 데이터 프레임
... # 변수=값 형태의 인자들
)

...에 지정된 그룹마다의 요약을 수행한 뒤 그 결과를 저장한 새로운 컬럼이 추가된 데이터 프레임을 반환한다.

subset은 이전 POST 참조

Transform()

transform은 연산 결과를 데이터 프레임의 새로운 컬럼에 저장하는 함수이다.

이를 사용해 baseball 데이터에 각 행이 선수의 몇 년차 통계인지를 뜻하는 cyear 컬럼을 추가해보자.
다음 코드는 데이터를 선수id로 분할하여 그룹 지은 뒤, 각 그룹에세 year의 최솟값과 현재 행의 year값의 차이를 cyear에 저장 한다.

> head(ddply(baseball, .(id), transform, cyear = year - min(year) + 1))

         id year stint team lg   g  ab   r   h X2b X3b hr rbi sb cs bb so ibb hbp sh sf gidp cyear
1 aaronha01 1954     1  ML1 NL 122 468  58 131  27   6 13  69  2  2 28 39  NA   3  6  4   13     1
2 aaronha01 1955     1  ML1 NL 153 602 105 189  37   9 27 106  3  1 49 61   5   3  7  4   20     2
3 aaronha01 1956     1  ML1 NL 153 609 106 200  34  14 26  92  2  4 37 54   6   2  5  7   21     3
4 aaronha01 1957     1  ML1 NL 151 615 118 198  27   6 44 132  1  1 57 58  15   0  0  3   13     4
5 aaronha01 1958     1  ML1 NL 153 601 109 196  34   4 30  95  4  1 59 49  16   1  0  3   21     5
6 aaronha01 1959     1  ML1 NL 154 629 116 223  46   7 39 123  8  0 51 54  17   4  0  9   19     6

Mutate()

base::transform()을 개선한 plyr::mutate() 함수가 있다. 이 함수는 여러 컬럼을 데이터 프레임에 추가할 때 바로 앞서 추가한 컬럼을 뒤에 추가하는 컬럼에서 참조할 수 있어 편리하다. 예를 들어, 아래 코드에서 muate()를 이용해 transform() 예에서처럼 cyear를 계산한 뒤log(cyear)를 log_cyear컬럼으로 추가 한다. 
만약 mutate()가 아닌 transform()을 사용하면 이 경우 에러가 발생 한다.

> head( ddply(baseball, .(id), mutate, cyear=year - min(year)+1, log_cyear = log(cyear)))
> 
         id year stint team lg   g  ab   r   h X2b X3b hr rbi sb cs bb so ibb hbp sh sf gidp cyear log_cyear
1 aaronha01 1954     1  ML1 NL 122 468  58 131  27   6 13  69  2  2 28 39  NA   3  6  4   13     1 0.0000000
2 aaronha01 1955     1  ML1 NL 153 602 105 189  37   9 27 106  3  1 49 61   5   3  7  4   20     2 0.6931472
3 aaronha01 1956     1  ML1 NL 153 609 106 200  34  14 26  92  2  4 37 54   6   2  5  7   21     3 1.0986123
4 aaronha01 1957     1  ML1 NL 151 615 118 198  27   6 44 132  1  1 57 58  15   0  0  3   13     4 1.3862944
5 aaronha01 1958     1  ML1 NL 153 601 109 196  34   4 30  95  4  1 59 49  16   1  0  3   21     5 1.6094379
6 aaronha01 1959     1  ML1 NL 154 629 116 223  46   7 39 123  8  0 51 54  17   4  0  9   19     6 1.7917595

Summarise()

transform이 인자로 주어진 계산 결과를 새로운 컬럼에 추가한 데이터 프레임을 반환하는 반면,
summarise()는 계산 결과만을 담은 새로운 데이터 프레임을 반환 한다.

baseball 데이터에서 각 선수의 최초 데이터가 몇 년도인지를 조사해보자.
아래 예에서는 데이터를 id마다 그룹지은 뒤 각 그룹마다 year의 최솟값을 계산한 minyear 컬럼을 생성 했다.
연산 시 사용할 함수로 summarise()를 지정했으므로 그룹을 짓는 변수인 id와 각 그룹의 요약 값 minyear만 저장된 데이터 프레임이 반환됐다.

> head (ddply(baseball, .(id), summarise, minyear=min(year)))
         id minyear

1 aaronha01    1954
2 abernte02    1955
3 adairje01    1958
4 adamsba01    1906
5 adamsbo03    1946
6 adcocjo01    1950

만약 여러 요약 값을 구하고 싶다면 요약 값 계산을 계속 나열한다.

> head (ddply(baseball, .(id), summarise, minyear=min(year), maxyear=max(year)))
         id minyear maxyear

1 aaronha01    1954    1976
2 abernte02    1955    1972
3 adairje01    1958    1970
4 adamsba01    1906    1926
5 adamsbo03    1946    1959
6 adcocjo01    1950    1966


'AI > R Basic' 카테고리의 다른 글

Apply 함수 (데이터 조작)  (1) 2015.10.03
R의 문자열 처리 및 비교  (0) 2015.10.03
Reshape2 pacakge (데이터 조작)  (0) 2015.10.01
R 자주 사용하는 팁 및 한글 주석 깨짐 해결  (2) 2015.07.30
R의 철학  (0) 2015.04.17

Reshape2 pacakge (데이터 조작)


해당 페키지는 Handley Wickham에 의해서 2007년에 개발된 것이다.

해당 기능은 아래의 저널에 게재 되었다. 해당저널은 JCR 기준 상위 5%이내의 저널이다.

Reshaping Data with the reshape Package. Journal of Statistical Software



reshape2 package를 이용하는 방법

CRAN에서 제공하는 페키지이다. 좀더 향상된 기능의 자르고 쪼개고 재결합하는 기능을 담고 있다.


우리는 때때로 Wide-format 또는 Long-format을 시시각각 원한다.



Wide-format data

ozone   wind  temp
1 23.62 11.623 65.55
2 29.44 10.267 79.10
3 59.12  8.942 83.90
4 59.96  8.794 83.97



Long-format data

    variable  value
 1     ozone 23.615
 2     ozone 29.444
 3     ozone 59.115
 4     ozone 59.962
 5      wind 11.623
 6      wind 10.267
 7      wind  8.942
 8      wind  8.794
 9      temp 65.548
 10     temp 79.100
 11     temp 83.903
 12     temp 83.968


wide-format의 경우 데이터를 분석 할때 주로 쓰이고

long-format은 그외의 모든 경우에 이용된다.

ggplot2

plyr

modeling functions ( lm(), glm(), gam(), etc)


해당 페키지의 key function은 아래와 같다.


melt: wide-format data를 읽어서 그것을 long-format으로 변경함.

cast: long-format data를 읽어서 그것을 wide-format으로 변경함.



melt 설명

melt은 value와 variable로 구분되서 동작한다.

즉 변수(variable)에 대해서 값(value)를 매칭하는 방식으로 넓게 퍼진 데이터를 길게 변경한다.


melt default의 동작 방식은

numeric data를 포함하는 모든 열들이 변수(variable)이 된다.


원래 프레임의 열이 6개고 모든 열이 numeric data라면 

그리고 행이 135개라면 이것을 default melt으로 변경하면

135 * 6 = 918개의 데이터로 길어 지게 된다.



만약 특정 열에대해서 다른 값들을 정리하고 싶다면, vars = c("x","y") 의 옵션을 사용 한다.

즉, X,Y를 ID 변수로 설정하고 이것의 값들은 변경하지 않는다. 


$원래의 행의 수 \times ( 총 열의수 - ID변수의 수)  = 새로 생성될 행의 수$


> aql <- melt(airquality, id.vars = c("month","day"))


실행결과

> str(airquality)
'data.frame':	153 obs. of  6 variables:
 $ ozone  : int  41 36 12 18 NA 28 23 19 8 NA ...
 $ solar.r: int  190 118 149 313 NA NA 299 99 19 194 ...
 $ wind   : num  7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
 $ temp   : int  67 72 74 62 56 66 65 59 61 69 ...
 $ month  : int  5 5 5 5 5 5 5 5 5 5 ...
 $ day    : int  1 2 3 4 5 6 7 8 9 10 ...
> aql <- melt(airquality, id.vars = c("month","day"))
> str(aql)
'data.frame':	612 obs. of  4 variables:
 $ month   : int  5 5 5 5 5 5 5 5 5 5 ...
 $ day     : int  1 2 3 4 5 6 7 8 9 10 ...
 $ variable: Factor w/ 4 levels "ozone","solar.r",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ value   : num  41 36 12 18 NA 28 23 19 8 NA ...


이름변경 방법

aql <- melt(airquality, id.vars = c("month", "day"),
  variable.name = "climate_variable", 
  value.name = "climate_value")
head(aql)




#   month day climate_variable climate_value

# 1     5   1            ozone            41

# 2     5   2            ozone            36

# 3     5   3            ozone            12

# 4     5   4            ozone            18

# 5     5   5            ozone            NA

# 6     5   6            ozone            28



cast 함수의 이해


인간이 이해하기에는 wide-format data가 가장 좋다.

따라서 스크래치 단계에서 많이 사용된다.


cast는 데이터 타입별로 지원한다. 하지만 여기서는 data.frame에 대해서 주로 다루겠다.


aql <- melt(airquality, id.vars = c("month", "day"))

aqw <- dcast(aql, month + day ~ variable)

head(aqw)


#   month day ozone solar.r wind temp

# 1     5   1    41     190  7.4   67

# 2     5   2    36     118  8.0   72

# 3     5   3    12     149 12.6   74

# 4     5   4    18     313 11.5   62

# 5     5   5    NA      NA 14.3   56

# 6     5   6    28      NA 14.9   66


head(airquality) # original data


#   ozone solar.r wind temp month day

# 1    41     190  7.4   67     5   1

# 2    36     118  8.0   72     5   2

# 3    12     149 12.6   74     5   3

# 4    18     313 11.5   62     5   4

# 5    NA      NA 14.3   56     5   5

# 6    28      NA 14.9   66     5   6



동작 방식을 그림으로 정리하면 아래와 같다.




추가적인 정보는 아래의 명령어로 알 수 있다.


R 자주 사용하는 팁 및 한글 주석 깨짐 해결


1. 자주 사용하는 RStudio 단축키와 명령

    –  Console 화면에서 Ctrl_l (Ctrl_소문자L) : 화면을 깨끗하게 지웁니다.

    –  rm(list=ls(all=TRUE)) : 작업 영역을 깨끗이 청소 합니다.

    –  Ctrl_+ : 화면에 표시되는 문자의 크기를 크게 합니다.

    –  Ctrl_- : 화면에 표시되는 문자의 크기를 작게 합니다.

    –  "Tools -> Global Options…" 메뉴를 선택한 후 "General" 메뉴에서

        "Default working directory (when not in a project):" : RStudio에서 사용할 작업용 폴더를 지정 합니다.

        "Default text encoding: " : ~.R 파일의 인코딩을 지정 합니다.  저는 "UTF-8"을 지정하여 사용하고 있습니다.

 

    –  RScript 편집 화면에서 Ctrl_Enter : 커서가 있는 라인을 Console 화면에서 실행 합니다.

    –  ? ~ : help(~)와 동일한 기능으로 함수, 데이터셋 등에 대한 도움말을 표시 합니다.

        사용 예 1)  ? iris                 : iris 데이터셋에 대한 도움말

        사용 예 2)  ? summary         : summary 함수에 대한 도움말

    –  ??  ~ : help.search("~")와 동일한 기능으로 함수 등의 이름을 명확히 알지 못할 경우, 검색을 할 때 사용 합니다.

    –  help(package = "~"), library(help = "~") : 패키지(라이브러리) 도움말로 제공하는 함수 목록을 확인할 수 있습니다.

        사용 예)  library(help = "stats") : stats 패키지의 도움말 화면을 표시 합니다.

    –  methods(~) : ~이 대표하는 함수들의 목록을 표시 합니다.

        사용 예)  methods(plot) : 다양한 데이터 타입을 사용하여 챠트를 그려주는 함수명을 확인할 수 있습니다.

                     시계열 데이터를 그려주는 plot.ts(~) 대신에 

                      대표 함수명인 plot(~)를 사용하면 내부적으로 plot.ts(~)가 실행이 됩니다.

    –  args(~) : ~ 함수의 인자 정보를 조회 합니다.

        사용 예) args(lm) : 회귀분석에서 사용하는 lm 함수의 인자 정보를 확인 합니다.

    –  attributes(~) : 데이터셋의 인자 정보를 조회 합니다.

    –  TAB : 자동 완성 기능으로 console 창에서 몇글자를 입력한 후 TAB키를 누르면

                입력한 글자로 시작되는 함수 목록을 보여 주어 자동 완성 기능을 사용할 수 있도록 합니다.

 

 

2.  문자셋 관련 사항

  –  UTF-8 문자셋으로 저장된 ~.R 파일을 사용할 경우

      –  "Tools -> Global Options…" 메뉴를 선택한 후 "General" 메뉴에서

        "Default text encoding: " : ~.R 파일의 인코딩을 지정 합니다.  "UTF-8"을 지정하세요.

 


  –  UTF-8 문자셋으로 저장된 데이터 (csv 파일 등)을 읽을 경우

     read.table(생략, encoding = "UTF-8")                            #— 문자셋 정보를 명시 합니다.

 

  –  R의 인코딩 정보 확인

      localeToCharset()

      Sys.getlocale()

  –  오류 메시지를 영문으로 보기 (영문 오류 메시지가 명확하고 구글 등의 검색을 통해서 확인하기가 편리 합니다.)

      Sys.setlocale("LC_ALL", "English_United States.1252")  #— 영문 문자셋을 지정 합니다.

      Sys.setlocale()                                                          #— 원래 디폴트로 설정된 문자셋으로 복구 됩니다.

  –   데이터의 인코딩 정보 확인

      Encoding(~)

  –  문자열의 인코딩 변환

      iconv(~, "CP949", "UTF-8) #— "CP949"로 인코딩된 ~라는 데이터에 저장된 문자열을 "UTF-8"로 인코딩된 문자열로 변환

 

  –  "Notepad++" 텍스트 편집기 : 오픈소스로 제공되는 편집기로 사용이 편리 합니다.

      –   다운로드 사이트 : http://notepad-plus-plus.org/

      –   파일의 문자셋 변경 방법

           편집기의 우측 하단 영역에 문자셋이 표시 됩니다.  (ANSI, ANSI as UTF-8 등)

              윈도우의 디폴드 문자셋인 CP949를 사용할 경우 ANSI로 표시됨

              BOM이 없는 UTF-8 문자셋을 사용할 경우 ANSI as UTF-8로 표시됨

           "인코딩" 메뉴에서

              "ANSI로 변환" 메뉴 선택                    : UTF-8 문자셋으로 저장된 파일을 CP949 문자셋으로 변환 

              "UTF-8 (BOM 없음)로 변환" 메뉴 선택 : CP949 문자셋으로 저장된 파일을 UTF-8 문자셋으로 변환

R을 써야 하는 이유?


하나의 연구를 마무리 짓기위해서는 검증 실험이 절대적이다.

이러한 상황속에서 논문을 한편 쓰고나면 엄청나게 많은 데이터들이 난잡하게 파일로 남는것을 알 수 있다.


엄청난 양의 임시파일 

스크립트코드

중간 결과물


여기서 문제는 논문은 보통 여러차례 reject 맞는 것이 일반적이다. revision을 하려고 보면 기억도 나질 않는다.

다시 그래프를 그리고 데이터를 해석하기 위해서는 이전 데이터를 다시 봐야하는데 그럴때 참 많은 어려움을 느낀다.


그나마 프로그램을 엑셀과 같이 1개만 쓰면 모를까

통계 처리를 위해서 SPSS 등과 같은 SAS 프로그램을 사용 했다면 일은 더욱더 복잡해 진다.

이러한 데이터 관리와 처리의 문제를 RStudio를 통해서 해결해 보자.



R의 언어적 장정

백터를 이용해서 데이터를 처리한다. 이러한 자료구조는 전통적인 언어에서 지원하지 못하는 기능이다.

loop대신 apply 종류의 함수를 이용하므로 엄청난 실행 향상을 가져오며 계산의 단순함을 가져온다.

atomic operation을 목표로하므로 하나하나의 기능은 단순하지만 조합하면 무엇이든 할 수 있다.

부분적으로 함수 언어의 형태를 가지므로 병렬화에 용이하다. 하둡과 맵 리듀스에 적용하기 쉽다.







R 기본


변수 조작


목록출력


ls() # 전체 리스트를 출력한다.

반환값은 벡터이다.


ls.str() # 각변수에 대해서 더 자세한 정보를 보여준다.

변수들을 열함과 동시에 그 구조까지 보여주게 된다.


삭제방법

작업 공간의 변수를 삭제하고 싶을때 사용한다. 한번 지우면 복구가 불가능하니 주의하자.


rm(x) #작업 공간에서 x라는 변수를 삭제 한다.


rm(list=ls()) # rm과 ls()를 조합해서 현재 작업 공간에 정의된 모든 변수를 지울 수도 있다.






R 함수 정의


#한줄짜리
fuction (매개변수, ... ,매개변수n) expr

#여러줄
fuction (매개변수, ... ,매개변수n){ 
expr
}


파일 입출력



read.csv("name")
header = FALSE

# 행에다가 이름을 쓸일은 거의 없기 때문에 FALSE로 설정 한다.
write.csv(x, file="파일명", row.names=FALSE)
#파일 리스트를 출력 하는 방법
list.files()
# 하위 디렉터리 목록을 출력한다.
list.files(recursive=T) 
#현재 디렉터리에서 파일을 읽어 들인다.
files <- list.files(pattern="*.csv")
#절대 경로를 이용해서 파일을 읽어 들인다.
files <- Sys.glob(paste(directory,"//*.csv",sep=""))



객체 저장


오랜 연산결과 끝에 얻어낸 결과라면 해당 결과를 담고 있는 객체를 저장할 필요가 있다.

R객체를 저장하는 것은 save() 이고 불러오는 것은 load()이다.


#메모리에 있는 개체를 파일에 저장한다.
save(x,y, file="xy.RData"
#모든 메모리에 존재하는 객체를 파일에 저장 한다
rm(list=ls()) # 메모리에 있는 개체를 모두 삭제
a <- 1:5
b <- 6:10
c <- 11:15
save(list=ls(), file=abc.RData")
load("abc.RData")






Working Directory 변경


getwd() 를이용해서 확인 할 수 있다.

setwd() 를 이용해서 설정 한다.




시스템 환경 변수 계산 하는 방법


환경 변수를 알아내거나 변경하는 방법을 말한다.


Sys.getenv("SHELL")
Sys.setenv(SHELL="/bin/ksh")


R의 홈 디렉터리를 찾아내는 방법

Sys.getenv("R_HOME")




'AI > R Basic' 카테고리의 다른 글

R의 문자열 처리 및 비교  (0) 2015.10.03
Plyr package (데이터 조작)  (0) 2015.10.01
Reshape2 pacakge (데이터 조작)  (0) 2015.10.01
R 자주 사용하는 팁 및 한글 주석 깨짐 해결  (2) 2015.07.30
R의 철학  (0) 2015.04.17

+ Recent posts