【问题标题】:Change values in row based on a column value and replacing specified column range根据列值更改行中的值并替换指定的列范围
【发布时间】:2014-03-23 01:11:10
【问题描述】:

我找到了大部分答案:Change values in row based on a column value r。有两个区别:我想根据分类变量的测试来替换值,并且我想指定要替换值的范围。我正在使用 8600 奇行和 170 列的数据框。

这是一个例子:-

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 替换月份为“三月”或“四月”的 VAR2 和 VAR3(不是 VAR1)的所有值。

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

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

print(x) 给出:

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

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

【问题讨论】:

    标签: r excel replace dataframe


    【解决方案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
    猜你喜欢
    • 2022-11-20
    • 2014-11-04
    • 2022-01-14
    • 2017-09-17
    • 2021-12-04
    • 2021-01-04
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多