根据多个条件替换 data.frame 上的值

标签 r dataframe conditional plyr

这有点像之前 question 的后续其中的想法是根据多个条件替换 data.frame 中的给定值。

这是一个简单的例子,使用 base R:

df <- data.frame( var1=c("k",2,NA,6,5,"K","k",1),
              var2=c(4,2,6,0,9,1,3,2),
              var3=c("d","d","d","d","d","d","n","f"))
df

    var1 var2 var3
1    k    4    d
2    2    2    d
3 <NA>    6    d
4    6    0    d
5    5    9    d
6    K    1    d
7    k    3    n
8    1    2    f

目标是修改值 var1==kvar3==n,比如乘以 9:

df$var2[df$var1=="k" & df$var3=="n"] <- df$var2[df$var1=="k" & df$var3=="n"]/9

但是,感兴趣的实际 df 会生成上述问题中所述的错误消息。其中提供的答案在每个条件下否定 NA,df$var1=="k"& !is.na(df$var1) 用大量代码解决了这个问题。

我的问题:是否有使用 plyr 的更简单的解决方案?

最佳答案

我们可以使用data.table。将“data.frame”转换为“data.table”(setDT(df))。我们在'i'中指定逻辑条件,分配(:=)变量('var2')为'var2/9'。这会很有效,因为它会就地修改。

library(data.table)
setDT(df)[!is.na(var1) & var1=='k' & var3=='n', var2 := var2/9]

关于根据多个条件替换 data.frame 上的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32803740/

相关文章:

python - 如何将 numpy 数组和索引数组映射到 pandas 数据框?

java - 这种语法在 Java 中称为 Bool bool = object.method() > 0 是什么

从R中的多列中删除字符串

r - Shiny 的ui.R-标记(“div”中的错误,列表(...))-不确定错误在哪里

r - 如何在ubuntu上安装R的i386版本?

python - 对 pandas 数据框中包含字符串的列进行求和

r - r 中的 MATCH 函数

python - 如果它们在特定时间间隔内出现,则计算一系列值

Excel:将单元格的颜色设置为另一个

excel - 带索引函数的条件百分位数