如何使用 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() )