【问题标题】:Updating individual values (not rows) in an R data.frame更新 R data.frame 中的单个值(不是行)
【发布时间】:2020-01-24 11:56:21
【问题描述】:

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

   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 

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    使用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 &gt; 500,] 将其索引为矩阵,因此会引发尺寸错误。您几乎明白了,您所要做的就是删除代码中的逗号(请参阅我的最后一个替代方案)。

    【讨论】:

    • 谢谢!那我为什么不能用mydata[mydata$var3 &gt; 500, c('var3')] &lt;- NA呢?
    • mydata[mydata$var3 &gt; 500, c('var3')] &lt;- NA 适合我。
    • @sam 确保你没有在 var3 周围出现反引号“`”而不是“'”
    • 谢谢,但这真的不是问题......我正在使用model.data$var3[model.data$var3 &gt; 500] &lt;- NA,这会导致诸如NA.2 NA NA NA NA NA NA NA NA之类的行——这绝对是奇怪的。
    • 对不起大家;我只是使用错误的命令来实际可视化行(mydata[mydata$var3 &gt; 500,]) - 现在一切都很好......
    猜你喜欢
    • 2017-09-16
    • 1970-01-01
    • 2012-09-07
    • 2013-02-09
    • 1970-01-01
    • 2013-01-24
    • 2020-01-05
    • 1970-01-01
    相关资源
    最近更新 更多