때에 따라서는 다음에 보인 c.csv 파일처럼 데이터에 NA를 지정하는 문자열이 저장되어 있을 수도 있다.
id,name,score 1,"Mr. Foo",95 2,"Ms. Bar",NIL 3,"Mr. Baz",92
이 데이터를 read.csv( )로 읽어들이면 NIL이 문자열이므로 팩터로 저장된다. 그 결과 score 컬럼 전체가 팩터가 된다.
> (x <- read.csv("c.csv")) id name score 1 1 Mr. Foo 95 2 2 Ms. Bar NIL 3 3 Mr. Baz 92 > str(x) 'data.frame': 3 obs. of 3 variables: $ id : int 1 2 3 $ name : Factor w/ 3 levels "Mr. Baz","Mr. Foo",..: 2 3 1 $ score: Factor w/ 3 levels " 92"," 95"," NIL": 2 3 1
이러한 결과를 피하려면 na.strings 인자를 사용한다. na.strings의 기본값은 “NA”로, “NA”라는 문자열이 주어지면 이를 R이 인식하는 NA로 바꿔준다. 이 예에서는 na.strings=c(“NIL”)을 사용해 NIL을 NA로 지정할 수 있다. na.strings에 지정하는 값은 벡터므로 여러 문자열을 벡터로 지정하면 벡터 내 모든 문자열이 NA로 저장된다.
> x <- read.csv("c.csv", na.strings=c("NIL")) > str(x) 'data.frame': 3 obs. of 3 variables: $ id : int 1 2 3 $ name : Factor w/ 3 levels "Mr. Baz","Mr. Foo",..: 2 3 1 $ score: int 95 NA 92 > is.na(x$score) [1] FALSE TRUE FALSE
is.na( )로 확인한 결과 NIL이 NA로 잘 변환되었음을 볼 수 있다.
데이터를 CSV 파일로 저장하려면 write.csv( )를 사용한다. 다음 예에서는 row.names를 FALSE로 지정하여 행 이름은 제외하고 파일에 저장한다.
> write.csv(x, "d.csv", row.names=FALSE)
결과 파일 d.csv는 다음과 같다.
"id","name","score" 1,"Mr. Foo",95 2,"Ms. Bar",97 3,"Mr. Baz",92
만약 row.names=FALSE를 지정하지 않고 CSV 파일로 데이터를 저장하면 다음과 같은 결과를 얻는다.
"","id","name","score" "1",1,"Mr. Foo",95 "2",2,"Ms. Bar",97 "3",3,"Mr. Baz",92
이 CSV 파일의 첫 번째 컬럼은 행 번호 1, 2, 3을 의미한다. 그러나 이 값이 데이터에 꼭 필요한 정보가 아니면 생략하는 것이 낫다.