我想根据一个简单的标准更新R data.frame var3
中mydata
的值。
var1 var2 var3
1 1 4 5
2 3 58 800
3 8 232 8
我认为应该做以下事情:
mydata$var3[mydata$var3 > 500,] <- NA
但是,这会将每个匹配记录的整行替换为NA(行的所有单元格),而不仅仅是var3
值(单元格):
var1 var2 var3
1 1 4 5
2 NA NA NA
3 8 232 8
如何确保仅替换所选变量的值? mydata
应该看起来像
var1 var2 var3
1 1 4 5
2 3 58 NA
3 8 232 8
答案 0 :(得分:13)
使用which
和arr.ind=TRUE
> mydata[which(mydata[,3]>500, arr.ind=TRUE), 3] <- NA
> mydata
var1 var2 var3
1 1 4 5
2 3 58 NA
3 8 232 8
或者只是修改您之前的尝试......
mydata[mydata$var3 > 500, 3] <- NA
这也有效
mydata$var3[mydata$var3 > 500 ] <- NA # note no comma is inside [ ]
您的尝试无效,因为mydata$var3
提供了一个向量,并且您使用[mydata$var3 > 500,]
将其编入索引,就好像它是一个矩阵,因此会引发维度错误。你几乎得到它,你所要做的就是删除代码中的逗号(参见我的上一个替代方案)。