这有点像之前 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==k
和 var3==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/