我想知道是否有一种更优雅的方式来获取数据帧,按 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/

10-12 17:11