我想知道是否有一种更优雅的方式来获取数据帧,按 x
分组以查看数据集中出现多少个 x,然后变异以找到每个 x ( y
)的第一次出现
test <- data.frame(x = c("a", "b", "c", "d",
"c", "b", "e", "f", "g"),
y = c(1,1,1,1,2,2,2,2,2))
x y
1 a 1
2 b 1
3 c 1
4 d 1
5 c 2
6 b 2
7 e 2
8 f 2
9 g 2
电流输出
output <- test %>%
group_by(x) %>%
summarise(count = n())
x count
<fct> <int>
1 a 1
2 b 2
3 c 2
4 d 1
5 e 1
6 f 1
7 g 1
期望输出
x count first_seen
<fct> <int> <dbl>
1 a 1 1
2 b 2 1
3 c 2 1
4 d 1 1
5 e 1 2
6 f 1 2
7 g 1 2
我可以过滤第一次出现的
test
数据帧,然后使用 left_join 但希望有一个使用 mutate 的更优雅的解决方案?# filter for first occurrences of y
right <- test %>%
group_by(x) %>%
filter(y == min(y)) %>%
slice(1) %>%
ungroup()
# bind to the output dataframe
left_join(output, right, by = "x")
最佳答案
我们可以在按 'x' 分组后使用 first
创建一个新列,也在 group_by
中使用它并使用 n()
获取计数
library(dplyr)
test %>%
group_by(x) %>%
group_by(first_seen = first(y), add = TRUE) %>%
summarise(count = n())
# A tibble: 7 x 3
# Groups: x [7]
# x first_seen count
# <fct> <dbl> <int>
#1 a 1 1
#2 b 1 2
#3 c 1 2
#4 d 1 1
#5 e 2 1
#6 f 2 1
#7 g 2 1
关于r - dplyr 变异 : create column using first occurrence of another column,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59199189/