以下是一些示例数据:
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
如果我想应用一个自定义函数来计算每个汽缸级别具有3或5档汽车的newvar值之间的差异,该怎么办?
df2 <- df1 %>% mutate(Diff = newvar[gear == "3"] - newvar[gear == "5"])
还是总结?
df2 <- df1 %>% summarise(Diff = newvar[gear == "3"] - newvar[gear == "5"])
必须有一种方法可以在不同因素下将功能应用于不同级别?
任何帮助表示赞赏!
答案 0 :(得分:3)
您的示例代码是其中的大部分方式。您可以这样做:
df1 %>%
mutate(Diff = newvar[gear == "3"] - newvar[gear == "5"])
或者:
df1 %>%
summarise(Diff = newvar[gear == "3"] - newvar[gear == "5"])
逻辑子集在mutate()
和summarise()
调用中仍然有效,就像其他向量一样。
请注意,这是因为您在示例代码中进行了summarise()
调用之后,df1
仍按cyl
进行了分组,否则您需要对group_by()
进行调用创建正确的分组。
答案 1 :(得分:2)
一种选择是将value = random.randint(1,new_variable)
转换为“宽”格式,然后执行spread
-