2013-12-10 45 views
3

我正在處理包含以全部大寫字母輸入的名字的數據集。我需要使用名稱作爲字符變量,而不是因素。使用「NA」作爲合法的不允許的值

數據集中的一個人名爲「NA」。我可以讓R接受「NA」作爲合法的字符值嗎?我的解決方法是重命名NAA人,但我有興趣查看是否有更好的方法。

+5

你有NA在你的數據集,否則價值?如果不是,只需將'read.table'中的'na.strings'參數改爲別的。 – A5C1D2H2I1M1N2O1R2T1

+2

'「NA」'是R中的字符值,而不是NA值。所以,只要確保您的實際NA值編碼不同,並在導入期間處理此問題。 – Roland

+0

感謝羅蘭和阿南達。在read.table中設置na.strings =「ZZZ」會照顧我的問題。 – JMH

回答

1

由於我的評論的演示,請考慮下面的示例CSV文件:

x <- tempfile() 
cat("v1,v2", "NA,1", "AB,3", sep = "\n", file = x) 

cat(readLines(x), sep = "\n") 
# v1,v2 
# NA,1 
# AB,3 

這裏有一個基本的read.csvstr。請注意0​​被視爲NA

str(read.csv(x)) 
# 'data.frame': 2 obs. of 2 variables: 
# $ v1: Factor w/ 1 level "AB": NA 1 
# $ v2: int 1 3 

現在,指定不同的字符作爲na.strings參數:

str(read.csv(x, na.strings = "")) 
# 'data.frame': 2 obs. of 2 variables: 
# $ v1: Factor w/ 2 levels "AB","NA": 2 1 
# $ v2: int 1 3 
+0

僅供參考'read.csv'現在有一個文本參數:'read.csv(text = c(「v1,v2」,「NA,1 「,」AB,3「))' – hadley

+0

@hadley,我非常瞭解這個文本參數,只是說明好像從實際文件中讀取以複製OP可能經歷的內容。 – A5C1D2H2I1M1N2O1R2T1