在 groupby 之后,我正在努力将 head(1)
应用于一列,聚合到另一列,并将逻辑表达式应用于另一列。
我有一个像这样的数据框 df
:
df <- data.frame(ref = c(rep("123", 3), rep("456", 3), rep("789", 4)),
carrier = c("A", "A", "B", "C", "C", "C", "D", "E", "F", "A"),
distance = c(20, 10, 40, 20, 90, 30, 20, 20, 30, 70),
stringsAsFactors = FALSE)
>df
ref carrier distance
123 A 20
123 A 10
123 B 40
456 C 20
456 C 90
456 C 30
789 D 20
789 E 20
789 F 30
789 A 70
我想在下面做这些事情。
ref
first_carrier
,其中返回每个组的 carrier
列的第一个值 agg_distance
,其中返回每组中 distance
列的聚合值 plus_100
,如果 agg_distance
大于 350,则返回 TRUE,FALSE 小于 100。所以结果应该是这样的。
ref first_carrier agg_distance plus_100
123 A 70 FALSE
456 C 140 TRUE
789 D 140 TRUE
我的尝试:
df_new <- df %>%
group_by(ref) %>%
mutate("agg_distance" = summarise(sum(distance)) %>%
mutate("plus_100" = ifelse(agg_distance >= 100, T, F))
但我只是不确定如何选择每组中的第一个载体。
最佳答案
你几乎独自拥有它。 summarise
在没有 mutate
的情况下使用。要获得第一个载体,只需在分组后调用 carrier
列的第一行。
library(dplyr)
df_new <- df %>%
group_by(ref) %>%
summarise(first_carrier = carrier[1],
agg_distance = sum(distance),
plus_100 = ifelse(agg_distance >= 100, T, F))
# A tibble: 3 x 4
ref first_carrier agg_distance plus_100
<chr> <chr> <dbl> <lgl>
1 123 A 70 FALSE
2 456 C 140 TRUE
3 789 D 140 TRUE
关于r - groupby 后在多列中应用不同的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51627920/