具有dplyr的自定义函数在一个因子内针对不同级别进行变异或汇总?
以下是一些示例数据:具有dplyr的自定义函数在一个因子内针对不同级别进行变异或汇总?,r,dplyr,R,Dplyr,以下是一些示例数据: library(car) library(dplyr) df1 <- mtcars %>% group_by(cyl, gear) %>% summarise( newvar = sum(wt) ) # A tibble: 8 x 3 # Groups: cyl [?] cyl gear newvar
library(car)
library(dplyr)
df1 <- mtcars %>%
group_by(cyl, gear) %>%
summarise(
newvar = sum(wt)
)
# A tibble: 8 x 3
# Groups: cyl [?]
cyl gear newvar
<dbl> <dbl> <dbl>
1 4 3 2.46
2 4 4 19.0
3 4 5 3.65
4 6 3 6.68
5 6 4 12.4
6 6 5 2.77
7 8 3 49.2
8 8 5 6.74
库(车)
图书馆(dplyr)
df1%
组别(气缸,档位)%>%
总结(
newvar=总和(wt)
)
#一个tibble:8x3
#组别:共青团[?]
圆柱齿轮
1 4 3 2.46
2 4 4 19.0
3 4 5 3.65
4 6 3 6.68
5 6 4 12.4
6 6 5 2.77
7 8 3 49.2
8 8 5 6.74
如果我想应用一个自定义函数来计算每个气缸级别3档或5档汽车的新VAR值之间的差异,该怎么办
df2 <- df1 %>% mutate(Diff = newvar[gear == "3"] - newvar[gear == "5"])
df2%变异(Diff=newvar[gear==“3”]-newvar[gear==“5”])
还是总结
df2 <- df1 %>% summarise(Diff = newvar[gear == "3"] - newvar[gear == "5"])
df2%摘要(差异=newvar[gear==“3”]-新var[gear==“5”])
必须有一种方法在不同的因素中应用不同级别的功能
感谢您的帮助 您的示例代码大部分都在这里。你可以做:
df1 %>%
mutate(Diff = newvar[gear == "3"] - newvar[gear == "5"])
或:
逻辑子集仍然可以在mutate()
和summary()
调用中使用,就像任何其他向量一样
请注意,这是因为在示例代码中调用
summary()
后,df1
仍按cyl
分组,否则需要执行group\u by()
调用来创建正确的分组 您的示例代码大部分都在这里。你可以做:
df1 %>%
mutate(Diff = newvar[gear == "3"] - newvar[gear == "5"])
或:
逻辑子集仍然可以在mutate()
和summary()
调用中使用,就像任何其他向量一样
请注意,这是因为在示例代码中调用
summary()
后,df1
仍按cyl
分组,否则需要执行group\u by()
调用来创建正确的分组 一个选项是将扩展成“宽”格式,然后执行-
library(tidyverse)
df1 %>%
filter(gear %in% c(3, 5) ) %>%
spread(gear, newvar) %>%
transmute(newvar = `3` - `5`)
# A tibble: 3 x 2
# Groups: cyl [3]
# cyl newvar
# <dbl> <dbl>
#1 4 -1.19
#2 6 3.90
#3 8 42.5
库(tidyverse)
df1%>%
过滤器(档位%c(3,5))%>%
排列(齿轮,新变量)%>%
转换(newvar=`3`-`5`)
#一个tibble:3x2
#组别:共青团[3]
#赛尔纽瓦尔
#
#1 4 -1.19
#2 6 3.90
#3 8 42.5
一个选项是将扩展成“宽”格式,然后执行-
library(tidyverse)
df1 %>%
filter(gear %in% c(3, 5) ) %>%
spread(gear, newvar) %>%
transmute(newvar = `3` - `5`)
# A tibble: 3 x 2
# Groups: cyl [3]
# cyl newvar
# <dbl> <dbl>
#1 4 -1.19
#2 6 3.90
#3 8 42.5
库(tidyverse)
df1%>%
过滤器(档位%c(3,5))%>%
排列(齿轮,新变量)%>%
转换(newvar=`3`-`5`)
#一个tibble:3x2
#组别:共青团[3]
#赛尔纽瓦尔
#
#1 4 -1.19
#2 6 3.90
#3 8 42.5
在我编写此答案时,您似乎更新了示例代码以与之匹配-此解决方案是否有您不喜欢的地方?你可能需要更新你的问题来解释为什么这不能满足你的需要。谢谢你的快速回答!我想我已经更新添加了“newvar”的时间和你一样!在我写这个答案的时候,看起来你更新了你的示例代码来匹配这个问题——这个解决方案有什么你不喜欢的地方吗?你可能需要更新你的问题来解释为什么这不能满足你的需要。谢谢你的快速回答!我想我已经更新添加了“newvar”的时间和你一样!