更新R data.frame中的单个值(而不是行)

时间:2013-10-31 17:34:29

标签: r dataframe

我想根据一个简单的标准更新R data.frame var3mydata的值。

   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 

1 个答案:

答案 0 :(得分:13)

使用whicharr.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,]将其编入索引,就好像它是一个矩阵,因此会引发维度错误。你几乎得到它,你所要做的就是删除代码中的逗号(参见我的上一个替代方案)。