关于 r:根据列值更改行中的值并替换特定列范围 | 珊瑚贝

Change values in row based on a column value and replacing specified column range


我发现我的大部分答案是:根据列值 r 更改行中的值。有两个区别:我想根据分类变量的测试来替换值,并且我想指定要替换值的范围。我正在使用 8600 奇数行和 170 列的数据框。

这是一个例子:-

1
2
3
x = data.frame(c(“Jan”,”Feb”,”March”,”April”),
               c(9,3,4,6), c(8, 12,9,11), c(10, 9, 7, 0.6))
names(x) = c(“Month”,”VAR1″,”VAR2″,”VAR3″)

我想用 NA 替换月份为 “March” 或 “April” 的 VAR2 和 VAR3(不是 VAR1)的所有值。

我试过:x[x$Month==c(“March”,”April”), ] <- data.frame(‘x’, NA, 3:4) 但我得到错误

1
2
3
Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = c(1L, 1L)) :
  invalid factor level, NA generated

和 print(x) 给出:

1
2
3
4
5
  Month VAR1 VAR2 VAR3
1   Jan    9    8   10
2   Feb    3   12    9
3  <NA>   NA    3    1
4  <NA>   NA    4    1

有一些明显的编程初学者语法错误我无法克服!


试试:

1
x[x$Month %in% c(“March”,”April”), c(“VAR2″,”VAR3”)] = NA
  • 希望在检查后变得不言自明,但如果有帮助,我会很高兴扩展。
  • 不言自明!只有一个障碍:在这里您可以指定 c(“VAR2″ ,”VAR3”) 。在我原来的 DF 中,我有 VAR1 到 VAR 164。输入这么多名字很痛苦!
  • 我将从一个提示开始,但如果还不够,我会很高兴扩展。看看 paste (或 sprintf) 和 rep 看看你是否可以复制你需要的东西而不用输入那么多:-)
  • 很酷。顺便说一句:这是我见过的最好的 SO R 问题之一。在研究你的问题和展示一个可重复的例子方面做得很好。
  • 像这样使用 sprintf x[x$Month %in% c(“March”,”April”), c(sprintf(“VAR%.i”, 3:6))] = NA


来源:https://www.codenong.com/22585801/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?