如何使用 dplyr 按组选择第一行


通常,您可能希望使用 R 中的dplyr包选择每个组的第一行。您可以使用以下基本语法来执行此操作:

 df %>%
  group_by (group_var) %>%
  arrange (values_var) %>%
  filter (row_number()== 1 )

下面的例子展示了如何在实际中使用这个功能。

示例:在 R 中按组选择第一行

假设我们在 R 中有以下数据集:

 #create dataset
df <- data.frame(team=c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C' ),
                 points=c(4, 9, 7, 7, 6, 13, 8, 8, 4, 17))

#view dataset
df

   team points
1 to 4
2 to 9
3 to 7
4 B 7
5 B 6
6 B 13
7 C 8
8 C 8
9 C 4
10 C 17

以下代码展示了如何使用 dplyr 包在 R 中按组选择第一行:

 library (dplyr)

df %>%
  group_by (team) %>%
  arrange (points) %>%
  filter (row_number()== 1 )

# A tibble: 3 x 2
# Groups: team [3]
  team points
    
1 to 4
2 C 4
3 B 6

默认情况下, arrange()按升序对值进行排序,但我们可以轻松地按降序对值进行排序:

 df %>%
  group_by (team) %>%
  arrange ( desc (dots)) %>%
  filter (row_number()== 1 )

# A tibble: 3 x 2
# Groups: team [3]
  team points
    
1 C 17
2 B 13
3 to 9

请注意,您可以轻松修改此代码以选择每组中的第 n行。只需更改row_number() == n即可。

例如,如果要按组选择第二行,可以使用以下语法:

 df %>%
  group_by (team) %>%
  arrange ( desc (dots)) %>%
  filter (row_number()== 2 )

或者您可以使用以下语法按组选择最后一行:

 df %>%
  group_by (team) %>%
  arrange ( desc (dots)) %>%
  filter (row_number()== n() )

其他资源

如何在R中排列行
如何在 R 中计算每组的观察值
如何在R中找到每组的最大值

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注