DBILITY

R file input, output ( 파일 입출력 ) 본문

statistics/R

R file input, output ( 파일 입출력 )

DBILITY 2018. 11. 24. 07:51
반응형

csv부터 해봐야겠다.SPC시료를 csv로 다운로드할 수 있도록 구현되어 있으니까...

데이터 정제시 전처리과정이라고나 할까..읽어서 전처리할 것 다 하고 저장..

read.으로 시작하는 함수들이 있다.help에 read를 입력해 보니 csv, delim, table, table.url, socket도 있다.

callback도 되나?

파일저정시 인코딩을 아래와 같이 하면 된다.

참고 Rstudio 에디터에서 한글이 입력되지 않을 수 있다. 이때는 작업표시줄을 한번 클릭하고 다시 해보면 된다.

read.csv( file, header = FALSE, sep = "", quote = "\"'",

           dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"),

           row.names, col.names, as.is = !stringsAsFactors,

           na.strings = "NA", colClasses = NA, nrows = -1,

           skip = 0, check.names = TRUE, fill = !blank.lines.skip,

           strip.white = FALSE, blank.lines.skip = TRUE,

           comment.char = "#",

           allowEscapes = FALSE, flush = FALSE,

           stringsAsFactors = default.stringsAsFactors(),

           fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)

 

옵션을 잘 살펴보자.

#csv파일은 준비한다.저장시 UTF-8 확인
------------------
id,name,score
1,'가가가',50
2,'나나나',60
3,'다다다',70
4,'라라라',X
------------------
> x<-read.csv('a.csv', header = TRUE, fileEncoding = 'UTF-8')
> x
  id     name score
1  1 '가가가'    50
2  2 '나나나'    60
3  3 '다다다'    70
4  4 '라라라'     X
#데이터프레임으로 변환이 되나 보다..factor타입으로 변환이 된 것도 있다.
#옵션에  stringsAsFactors = FALSE하면 문자열로 읽어 들임
> class(x)
[1] "data.frame"
> str(x)
'data.frame':	4 obs. of  3 variables:
 $ id   : int  1 2 3 4
 $ name : Factor w/ 4 levels "'가가가'","'나나나'",..: 1 2 3 4
 $ score: Factor w/ 4 levels "50","60","70",..: 1 2 3 4
> x$name
[1] '가가가' '나나나' '다다다'
Levels: '가가가' '나나나' '다다다'
#문자로 형전환
> x$name<-as.character(x$name)
> x$name
[1] "'가가가'" "'나나나'" "'다다다'"
> x$score
[1] 50 60 70 X 
Levels: 50 60 70 X
#문제는 4행 3열의 X문자다. 결측치가 X로 입력되어 있다.
#읽어들이기 전에 데이터구성을 먼저 살피고 결측치처리 방향을 정해야겠다.
#아래처러 형변환을 시도했더니 factor의 index로 결과값이 변환이 된다.
> x$score<-as.numeric (x$score)
> x$score
[1] 1 2 3 4
#읽어 들일때 na.strings옵션으로 NA로 변경할 문자열을 줄 수 있다.
> x<-read.csv('a.csv', header = TRUE, stringsAsFactors = FALSE, fileEncoding = 'UTF-8', na.strings = c('X'))
> x
  id     name score
1  1 '가가가'    50
2  2 '나나나'    60
3  3 '다다다'    70
4  4 '라라라'    NA
> class(x)
[1] "data.frame"
> str(x)
'data.frame':	4 obs. of  3 variables:
 $ id   : int  1 2 3 4
 $ name : chr  "'가가가'" "'나나나'" "'다다다'" "'라라라'"
 $ score: int  50 60 70 NA
> x[1,2]
[1] "'가가가'"
#stringsAsFactors = FALSE 옵션을 사용해서 문자열이 factor로 변환되지 않게 했다.
#데이터를 보니 single quotation mark가 포함되어 있다. 실제파일에 문자열이 포함되게 되어 있으니까...
#옵션에 quate="\'"를 입력하고 실행하니 제거 된다.
> x<-read.csv('a.csv', header = TRUE, stringsAsFactors = FALSE, 
+             fileEncoding = 'UTF-8', na.strings = c('X'), quote = "\'")
> x
  id   name score
1  1 가가가    50
2  2 나나나    60
3  3 다다다    70
4  4 라라라    NA
> str(x)
'data.frame':	4 obs. of  3 variables:
 $ id   : int  1 2 3 4
 $ name : chr  "가가가" "나나나" "다다다" "라라라"
 $ score: int  50 60 70 NA
> x[1,2]
[1] "가가가"
> is.na(x)
        id  name score
[1,] FALSE FALSE FALSE
[2,] FALSE FALSE FALSE
[3,] FALSE FALSE FALSE
[4,] FALSE FALSE  TRUE

 

write.csv(x, file = "", append = FALSE, quote = TRUE, sep = " ",

            eol = "\n", na = "NA", dec = ".", row.names = TRUE,

            col.names = TRUE, qmethod = c("escape", "double"),

            fileEncoding = "")

 

옵션을 잘 살펴 보자

> write.csv(x,'b.csv', quote=FALSE, row.names = FALSE, fileEncoding = 'UTF-8')
> y<-read.csv('b.csv', header = TRUE, stringsAsFactors = FALSE, fileEncoding = 'UTF-8')
> y
  id   name score
1  1 가가가    50
2  2 나나나    60
3  3 다다다    70
4  4 라라라    NA
> class(y)
[1] "data.frame"
> str(y)
'data.frame':	4 obs. of  3 variables:
 $ id   : int  1 2 3 4
 $ name : chr  "가가가" "나나나" "다다다" "라라라"
 $ score: int  50 60 70 NA
> y[1,2]
[1] "가가가"

#저장된 파일을 열어 본다.
-----------------
"id","name","score"
1,"가가가",50
2,"나나나",60
3,"다다다",70
4,"라라라",NA
-----------------

 

작업중 변수(객체)를 임시로 저장하고, 불러오는 등의 과정이 필요할 수 있다.

save(),load()함수를 사용하면 되는데, binary형태로 저장된다.

> save(x,y,file="xy.obj")
#실제파일을 열어봤다.
-----------------------------------------------------------------
?      r???```b`fed`b2Y?#'댃```2@2?Y?HD?€?
l?뙴y혎[n?뙴?"셦?@咽응€?玲콘?쮍?A┢(?$
SZ쐺_뵄?9'??&?뭎뮜뾙?첏??f%?L 7?멁?H?HLIf?쏛즘뾰? ??6  
-----------------------------------------------------------------
> ls()
[1] "x" "y"
> rm(list=ls())
> ls()
character(0)
> load("xy.obj")
> ls()
[1] "x" "y"
> x
  id   name score
1  1 가가가    50
2  2 나나나    60
3  3 다다다    70
4  4 라라라    NA
> y
  id   name score
1  1 가가가    50
2  2 나나나    60
3  3 다다다    70
4  4 라라라    NA

 

읽어들인 객체에 row나 column을 추가할 수 있다.

rbind(), cbind() 함수를 통해 가능하다.

말그대로 row append, col append다

#행추가
> a<-rbind(x,c('5','마마마',10))
> str(a)
'data.frame':	5 obs. of  3 variables:
 $ id   : chr  "1" "2" "3" "4" ...
 $ name : chr  "가가가" "나나나" "다다다" "라라라" ...
 $ score: chr  "50" "60" "70" NA ...
> a
  id   name score
1  1 가가가    50
2  2 나나나    60
3  3 다다다    70
4  4 라라라  <NA>
5  5 마마마    10
#열추가
> a<-cbind(a,grade=c('F','D0','C0','F','F'),stringsAsFactors = FALSE)

> a
  id   name score grade
1  1 가가가    50     F
2  2 나나나    60    D0
3  3 다다다    70    C0
4  4 라라라  <NA>     F
5  5 마마마    10     F

> str(a)
'data.frame':	5 obs. of  4 variables:
 $ id   : chr  "1" "2" "3" "4" ...
 $ name : chr  "가가가" "나나나" "다다다" "라라라" ...
 $ score: chr  "50" "60" "70" NA ...
 $ grade: chr  "F" "D0" "C0" "F" ...
#열삭제
> a$grade = NULL
> tail(a)
  id   name score
1  1 가가가    50
2  2 나나나    60
3  3 다다다    70
4  4 라라라  <NA>
5  5 마마마    10
#행삭제
> a<-a[-c(5),]
> tail(a)
  id   name score
1  1 가가가    50
2  2 나나나    60
3  3 다다다    70
4  4 라라라  <NA>

> ls()
[1] "a" "x" "y"
> rm(c("a"))
Error in rm(c("a")) : 
  ...는 반드시 이름 또는 문자열을 포함하고 있어야 합니다
> rm(list=c("a"))
> ls()
[1] "x" "y"

 

 

반응형
Comments