在 dataframedf
和 column a
,我想替换所有行的 allis.na
和 all a=2
<- 0
。
这已经通过以下方式简单地实现:df[is.na(df$a) | df$a==2, "a"] <- 0
b
我将在不同的列( 、、、等)上一遍又一遍地这样做c
,d
所以我只是想看看我是否可以构建一个函数。我将简单地一遍又一遍地使用该功能。这样,如果我需要更改哪些值或哪些输出,这将是一项简单的任务。
这是一个小例子。首先是数据框:
df<-data.frame(
a=sample(c(0,1,2), 10, replace=TRUE)
)
现在一些缺失值:
df[sample(nrow(df), 3, FALSE), "a"] <- NA
最后,替换的动作[我已经提到过]:
df[is.na(df$a) | df$a==2, "a"] <- 0
我尝试了以下功能:
f.na<-function(df,col) df[is.na(df[,col]) | df[,col]==2, col]<-0
f.na(df, "a")
我觉得它应该工作,但我不知道为什么它不工作。我得到:
[.data.frame
(df, , col)中的错误:选择了未定义的列
我知道我不能使用这个标志,所以我在网上阅读了一些内容后$
尝试使用这种格式。[]
我使用了apply
一种函数,但后来我无法在数据框中使用结果。所以我采取了这种方式。我想我可以为需要修改的每一列反复迭代,但我认为函数解决方案会很好。
你能建议我应该尝试什么吗?