替换NA零数据帧:代码不起作用

时间:2014-08-06 13:06:25

标签: r

我正在寻找一种方法来替换我的数据框中的NA'并在此处找到了一个很棒的回复: How do I replace NA values with zeros in an R dataframe?

我在aL3xa的答案中使用了代码来构建一个示例矩阵,并发现NA被替换得很好。 但是,当我将代码应用于我自己的数据框时,它似乎不起作用:

  

和(is.na(dat.sub))

[1] 453562

  

dat.sub [is.na(dat.sub)]< - 0

     

和(is.na(dat.sub))

[1] 453562

任何人都可以提出我可能做错的建议吗?

2 个答案:

答案 0 :(得分:1)

该命令适用于正确的数据帧:

ddf = structure(list(A = c(1L, NA, 3L), B = c(NA, 5L, NA), C = c(5L, 
NA, 7L)), .Names = c("A", "B", "C"), class = "data.frame", row.names = c(NA, 
-3L))

str(ddf)
'data.frame':   3 obs. of  3 variables:
 $ A: num  1 0 3
 $ B: num  0 5 0
 $ C: num  5 0 7

ddf
   A  B  C
1  1 NA  5
2 NA  5 NA
3  3 NA  7

ddf[is.na(ddf)] =0
ddf
  A B C
1 1 0 5
2 0 5 0
3 3 0 7

答案 1 :(得分:0)

数据帧本质上是具有相同长度的矢量列表。如果要更改数据框中的元素,则必须将更改应用于列出的向量之一。您可以通过调用数据框对象(df)来执行此操作,就像它是具有命名列的矩阵一样:

 df[is.na(df$dat.sub),"dat.sub"]<-0

其中dat.sub是您要更改的矢量的名称...或者您可以更改值:

 df$dat.sub[is.na(df$dat.sub)]<-0

通过从数据框中调用所选列表,即矢量。一旦您以这种方式执行此操作,您就可以开始使用apply和/或lapply来&#34;应用&#34;您可以替换数据框中的每个列表。