这有点是之前question的后续行动,其中的想法是根据多个条件替换data.frame中的给定值。
这是一个简单的例子,基础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
&amp; 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
?
答案 0 :(得分:4)
我们可以使用data.table
。将'data.frame'转换为'data.table'(setDT(df)
)。我们在'i'中指定逻辑条件,将变量('{1}})变量('var2')指定为'var2 / 9'。这将是有效的,因为它在适当的地方修改。
:=