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

时间:2015-09-27 01:40:31

标签: r dataframe conditional plyr

这有点是之前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

1 个答案:

答案 0 :(得分:4)

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(df))。我们在'i'中指定逻辑条件,将变量('{1}})变量('var2')指定为'var2 / 9'。这将是有效的,因为它在适当的地方修改。

:=