首页 文章

dplyr:将不同的功能应用于不同的组

提问于
浏览
3

我是一个尝试使用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等价物?

2 回答

  • 1

    有一个包含 mutate_if 函数的 dplyrExtras 包 .

    # 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)
    
  • 0

    您可以轻松避免使用 ifelse 作为数字返回值 . 只需将条件转换为数字并使用适当的数值计算 .

    df %>% mutate(Num2 = Num - 2*(Ops=="S") + 1)
    

相关问题