2010-07-28 44 views
48

我有一個數據幀包含(在隨機地方)一個字符值(比如"foo"),我想用NA代替。用數據幀中的NA代替字符值

在整個數據框中這樣做的最好方法是什麼?

+1

不要忘了重新定義列as.numeric()從‘富’切換幾個大字,以NA不會要挾整套設置爲數字。你必須強制它。 (如果這就是你正在做的) – 2010-07-28 22:15:31

回答

61

這樣的:在萌芽狀態這個

df[ df == "foo" ] <- NA 
+12

請注意,如果你試圖用「foo」替換NA,反向('df [df == NA] =「foo」')將不起作用;您需要使用'df [is.na(df)] < - 「foo」' – 2013-05-08 22:05:57

57

的一種方法是,當你在第一個地方讀取數據到字符轉換爲NA。

df <- read.csv("file.csv", na.strings = c("foo", "bar")) 
0

解決一個替代方法是如下:

for (i in 1:ncol(DF)){ 
    DF[which(DF[,i]==""),columnIndex]<-"ALL" 
    FinalData[which(is.na(FinalData[,columnIndex])),columnIndex]<-"ALL" 
} 
2

另一種選擇是is.na<-

is.na(df) <- df == "foo" 

注意,它的使用可能顯得有點反直覺的,但它實際上在右側的索引處將NA值賦予df

+1

或相同的''is.na < - '(df,df ==「foo」)' – jogo 2017-04-27 14:09:07

0

這可能與dplyrmutate_allreplace來完成:

library(dplyr) 
df <- data_frame(a = c('foo', 2, 3), b = c(1, 'foo', 3), c = c(1,2,'foobar'), d = c(1, 2, 3)) 

> df 
# A tibble: 3 x 4 
    a  b  c  d 
    <chr> <chr> <chr> <dbl> 
1 foo  1  1  1 
2  2 foo  2  2 
3  3  3 foobar  3 


df <- mutate_all(df, funs(replace(., .=='foo', NA))) 

> df 
# A tibble: 3 x 4 
     a  b  c  d 
    <chr> <chr> <chr> <dbl> 
1 <NA>  1  1  1 
2  2 <NA>  2  2 
3  3  3 foobar  3