2010-07-28 30 views
48

Tôi có khung dữ liệu chứa (ở vị trí ngẫu nhiên) giá trị ký tự (giả sử "foo") mà tôi muốn thay thế bằng NA.Thay thế các giá trị ký tự bằng NA trong khung dữ liệu

Cách tốt nhất để làm như vậy trên toàn bộ khung dữ liệu là gì?

+1

Đừng quên để xác định lại as.numeric cột của bạn() chuyển đổi một vài ký tự từ 'foo' để NA sẽ không ép buộc các toàn bộ được đặt thành số. Bạn phải ép buộc nó. (Nếu đó là những gì bạn đang làm) –

Trả lời

61

này:

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

Lưu ý rằng nếu bạn đang cố gắng thay NA bằng "foo", ngược lại ('df [df == NA] =" foo "') sẽ không hoạt động; bạn sẽ cần sử dụng 'df [is.na (df)] <-" foo "' –

57

Một cách để nip này từ trong trứng nước là để chuyển đổi nhân vật đó để NA khi bạn đọc dữ liệu trong ở nơi đầu tiên.

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

Một cách khác để giải quyết là dưới đây:

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

lựa chọn khác là is.na<-:

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

Lưu ý rằng việc sử dụng nó có thể có vẻ một chút phản trực giác, nhưng nó thực sự chỉ địnhNA giá trị cho df tại chỉ mục ở phía bên tay phải.

+1

hoặc cùng ''is.na <-' (df, df ==" foo ")' – jogo

0

Điều này có thể được thực hiện với dplyr 's mutate_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 
Các vấn đề liên quan