我是初学者,尝试使用dplyr进行数据分析。我的数据基本上来自一些操作(“Ops”)并且订购得很好。我经常需要根据操作类型对观察结果应用不同的函数(“Num”),然后将它们组合起来进行分析。
琐碎的例子如下:
X Num Ops
0 37 S
1 18 R
2 11 S
3 3 R
4 11 S
5 13 R
... ... ...
我想根据值列“Ops”添加一个新列“Num2”,例如:
df %〉% mutate(Num2=ifelse(Ops="S",Num-1, Num+1))
我不确定我是否应该做很多ifelse
作业 - 感觉多余且效率低下。
必须有一个更好的解决方案,可能使用“group_by,select,filter”的某些组合。有什么建议吗?
基本上我想弄清楚是否有办法根据某些标准对数据进行分组,然后将不同的函数应用于不同的子集,最后将结果合并在一起。我找到的典型dplyr示例将相同的函数应用于所有子集。
下面的@eddi使用data.table提供了更通用的解决方案。是否有dplyr等价物?
答案 0 :(得分:1)
有dplyrExtras
个包,其中包含mutate_if
个功能。
# install dplyrExtras
library(devtools)
install_github(repo="skranz/dplyrExtras")
require(dplyrExtras)
# code using mutate_if
df %>%
mutate(Num2 = Num+1) %>%
mutate_if(Ops=="S", Num2 = Num-1)
答案 1 :(得分:0)
您可以轻松避免数字返回值ifelse
。只需将条件转换为数字并使用适当的数值计算。
df %>% mutate(Num2 = Num - 2*(Ops=="S") + 1)