我正在寻找一种方法来替换我的数据框中的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
任何人都可以提出我可能做错的建议吗?
答案 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;您可以替换数据框中的每个列表。