dplyr:对不同的组应用不同的功能

dplyr:对不同的组应用不同的功能,r,data.table,dplyr,R,Data.table,Dplyr,我是一个尝试使用dplyr进行数据分析的初学者。我的数据基本上来自一些操作(“Ops”),并且排列有序。我经常需要根据操作类型对观察值(“Num”)应用不同的函数,然后将它们组合起来进行分析 下面是一个简单的例子: X Num Ops 0 37 S 1 18 R 2 11 S 3 3 R 4 11 S 5 13 R ... ... ... 我想根

我是一个尝试使用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”,例如:

我不确定我是否应该做大量的
ifelse
作业——这让我觉得既多余又低效

一定有更好的解决方案,也许可以使用“分组、选择、筛选”的组合。有什么建议吗

基本上,我想知道是否有一种方法可以根据特定的标准对数据进行分组,然后对不同的子集应用不同的函数,最后将结果合并到一起。我发现的典型dplyr示例将相同的函数应用于所有子集


@下面的eddi使用data.table提供了更通用的解决方案。是否有dplyr等价物?

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

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

有一个包含
mutate\u if
函数的
dplyextras

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

我正在寻找更通用的解决方案。函数通常更复杂,并且“按列分组”有两个以上的值。您可以尝试以下方法:检查、和,以获取想法和可能的替代技术。感谢您的建议。这些不是我想要的。基本上,我想知道是否有一种方法可以根据特定的标准对数据进行分组,对不同的子集应用不同的函数,然后将结果合并到一起。典型的dplyr示例将相同的函数应用于所有子集。@eddi看起来您确实为data.table提供了更通用的解决方案。有没有一个dplyr等价物?@Dong不确定,我不是一个似乎浪费的
dplyr
专家。我想在执行group_by(Ops)之后取消条件操作。可能的
# 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)