barcode

R 배워보기-5. 데이터 불러오고 쓰기

Coding/R

read.csv()

data <- read.csv('/home/koreanraichu/Others/csv/Drug.csv')

불러오는 거 성공은 했는데, 터미널에서 열었음(...)+SMILES 길이때문에 개 방대함으로 인해 결과 갭처 불가... 실화다. 

> data=read.csv("http://www.cookbook-r.com/Data_input_and_output/Loading_data_from_a_file/datafile.csv")
> data
   First    Last  Sex Number
1 Currer    Bell    F      2
2    Dr.   Seuss    M     49
3        Student <NA>     21

웹에서 가져오는 것도 된다.

 

read.table()

data <- read.table('/home/koreanraichu/Others/csv/Drug.csv',header=FALSE,sep=",")

헤더에 false를 줬더니 헤더가 가출한 상태로 온다. sep=","은 파이썬에도 비슷한 게 있음. (구분자 가르쳐주는 거)

> data=read.table("http://www.cookbook-r.com/Data_input_and_output/Loading_data_from_a_file/datafile.csv",strip.white=TRUE)
> data
      V1                     V2
1  First ,"Last","Sex","Number"
2 Currer          ,"Bell","F",2
3    Dr.        ,"Seuss","M",49
4              ,"Student",NA,21

read.table()에 strip.white=TRUE를 주면...... 내가 뭘 잘못했길래 표가 이렇게 개판 오분전이 된 걸까... 

 

file.choose()

> data<-read.csv(file.choose())
Enter file name: /home/koreanraichu/Others/csv/Drug.csv

쿡북에는 Dialog 어쩌고 하던데 여는 리눅스+터미널크리로 직접 경로를 써야 한다. (아예 쓰라고 뜬다)

 

stringsAsFactor

솔직히 팩터가 뭔지는 모름. 

data <- read.csv('/home/koreanraichu/Others/csv/Drug.csv',stringsAsFactors=FALSE)

이렇게 가져오면 된다. strongsAsFactors는 옵션 이름)

> data <- read.csv('/home/koreanraichu/Others/csv/Drug.csv',stringsAsFactors=FALSE)
> str(data$CID)
 int [1:17] 2244 1983 3672 6518 441300 71226662 6852395 65030 6918638 14982 ...
> str(data$SMILES)
 chr [1:17] "CC(=O)OC1=CC=CC=C1C(=O)O" "CC(=O)NC1=CC=C(C=C1)O" ...
> data <- read.csv('/home/koreanraichu/Others/csv/Drug.csv',stringsAsFactors=TRUE)
> str(data$CID)
 int [1:17] 2244 1983 3672 6518 441300 71226662 6852395 65030 6918638 14982 ...
> str(data$SMILES)
 Factor w/ 17 levels "C(C(CO[N+](=O)[O-])(CO[N+](=O)[O-])CO[N+](=O)[O-])O[N+](=O)[O-]",..: 8 6 9 1 5 10 7 16 3 11 ...

위는 해당 옵션이 False일 때, 아래는 True일 때. 잘 보면 SMILES가 각각 chr와 factor로 다르다. 

헐 근데 저 이거 안 주고 불러왔는데 망한듯... 아니 다시 불러오기 귀찮은데... 어쩌죠... 어 그럼 

> data$SMILES = as.character(data$SMILES)
> str(data$SMILES)
 chr [1:17] "CC(=O)OC1=CC=CC=C1C(=O)O" "CC(=O)NC1=CC=C(C=C1)O" ...

단식이면 이거 주고 

> stringcols=c("Name","Molecular.Weight")
> data[stringcols]=lapply(data[stringcols],as.character)

뭉텅이면 이거 주면 된다. ($는 pandas에서 ['컬럼']과 같은 기능을 한다)

 

엑셀과 SPSS

엑셀... 나 여기 xls가 없음... 

 

read.xls()

아무튼 이걸로 읽는다. 

library(foreign)
read.spss()

SPSS 파일은 foreign이라는 라이브러리를 불러온 상태에서 읽어야 한다. 

 

표 만드는건 왜 되는거지

> data=read.table('clipboard',header=TRUE)
경고메시지(들): 
In read.table("clipboard", header = TRUE) :
  'clipboard'에서 readTableHeader에 의하여 발견된 완성되지 않은 마지막 라인입니다
> data
    size weight cost
1  small      5    6
2 medium      8   10
3  large     11    9

클립보드에 있는 걸 불러오거나(물론 복사는 해야 한다)

> data2=read.table(stdin(),header=TRUE)
0: 1 2 3 4
1: 0 0 0 0
2: 0 0 0 0
3: 0 0 0 0
4: 
> data2
  X1 X2 X3 X4
1  0  0  0  0
2  0  0  0  0
3  0  0  0  0

입력하거나... 

> print(data2,row.names=FALSE)
 X1 X2 X3 X4
  0  0  0  0
  0  0  0  0
  0  0  0  0

행 이름 떼고 볼 수도 있다. 

> write.csv(data,stdout(),row.names=FALSE)
"size","weight","cost"
"small",5,6
"medium",8,10
"large",11,9

내 마음 속... 아니고... 하드... 아니고... 클립보드에 저(별)장 하고싶으면 이거 쓰자. 파일이요? 그건 이따 나와요. 

 

source()

R 스크립트를 불러올 때 쓰는데 내 컴퓨터에 R 스크립트가 없다. 

 

setwd('/home/username/desktop/rcode') # 소스가 있는 디렉토리로 가서
source('analyze.r') # 실행한다

그렇다고 합니다. 

 

write.csv()

> setwd('/home/koreanraichu')
> write.csv(data,"data.csv")

저거 안 해두면 대체 파일이 죄다 어디로 가는거냐... (setwd()는 work directory를 설정할 때 쓴다) 

아무튼 저장된 거 맞다. 

옵션으로 row.names=FALSE를 주면 행 이름이 빠지고, na=""를 주면 결측값을 공백으로 때운다. 잠깐 이거 다른걸로도 때울 수 있나? 

 

> write.table(data, "data.csv", sep="\t", row.names=FALSE, col.names=FALSE)

구분자도 지정 가능하다. (해당 코드에서는 탭으로 지정했고 저게 다 적용돼서 행렬 이름이 다 빠진다)

 

dump()

dump("data","data.Rdmpd") # 하나
dump(c("data","data2"),"data1.Rdmpd") # 뭉텅이
파일은 여기 있고
이렇게 열린다

dump()를 이용해 Rdmpd로 저장한 결과. 

 

saveRDS()

saveRDS("data","data.rds")
# ascii=TRUE 옵션을 주면 아스키 포맷이 된다

saveRDS()를 이용해 RDS format으로 저장한 결과. 참고로 저거 압축 관리자 소환된다. (그리고 압축 풀다가 에러났다)

 

save()

save(data,file="data.RData")

(추천 브금: 영탁-니가 왜 거기서 나와) R스튜디오: 불러놓고 뭔소리여

 

> save(data,file="data.RData",ascii=TRUE)

Ascii 포맷으로 저장할거면 이거 쓰면 되고

save(data, data1, file="data.RData")

여러 개 한꺼번에 쓸 거면 이거 쓰면 된다. 

 

sink()

> sink('analysis-output.text')
> set.seed(1)
> x=rnorm(10,10,1)
> y=rnorm(10,11,1)
> cat(sprintf("x has %d elements:\n",length(x)))
> print(x)
> cat("y=",y,"\n")
> cat("----------\n")
> cat("T-test between x and y\n")
> cat("----------\n")
> t.test(x,y)
> sink()
# 여기까지가 일차적인 기록이다. 
> sink('analysis-output.text',append=TRUE)
> cat("some more stuff here?")
> sink()
# append(내용 추가)한다는 모양.

오 쩐다 피보나치 수열도 저장 되나? 

'Coding > R' 카테고리의 다른 글

R 배워보기- 6.2. Manipulating data-Factors  (0) 2022.08.20
R 배워보기- 6.1. Manipulating data-General  (0) 2022.08.20
번외편-R로 미적분 하기  (0) 2022.08.20
R 배워보기-4. 공식  (0) 2022.08.20
R 배워보기-3. 문자열  (0) 2022.08.20