R 为数据帧中的每个组选择前N行
下面是dataframe的一个示例:R 为数据帧中的每个组选择前N行,r,dataframe,R,Dataframe,下面是dataframe的一个示例: Index Country 4.1 USA 2.1 USA 5.2 USA 1.1 Singapore 6.2 Singapore 8.1 Germany 4.5 Italy 7.1 Italy 2.3 Italy 5.9
Index Country
4.1 USA
2.1 USA
5.2 USA
1.1 Singapore
6.2 Singapore
8.1 Germany
4.5 Italy
7.1 Italy
2.3 Italy
5.9 Italy
8.8 Russia
并且,我打算在数据框中为每个国家的组获取N个元素。例如,如果N=3,那么我将从每个组中选取3行,如果任何特定组没有像Singapore这样的N个元素,那么它将只选取足够的两个记录,即带有国家标签Singapore。同样的情况也适用于超过N个元素的国家标签,例如意大利,因此它只需要3个元素
对于N=3,输出数据帧为:
Index Country
4.1 USA
2.1 USA
5.2 USA
1.1 Singapore
6.2 Singapore
8.1 Germany
4.5 Italy
7.1 Italy
2.3 Italy
8.8 Russia
我在想这样的事情:
aggregate(df, by=list(df$Country), head(df, 3))
但它似乎不起作用。使用
tidyverse
中的dplyr
包,您可以执行以下操作:
library(tidyverse)
df <- tribble(
~Index, ~Country
, 4.1, "USA"
, 2.1, "USA"
, 5.2, "USA"
, 1.1, "Singapore"
, 6.2, "Singapore"
, 8.1, "Germany"
, 4.5, "Italy"
, 7.1, "Italy"
, 2.3, "Italy"
, 5.9, "Italy"
, 8.8, "Russia"
)
df %>% # take the dataframe
group_by(Country) %>% # group it by the grouping variable
slice(1:3) # and pick rows 1 to 3 per group
库(tidyverse)
df%#获取数据帧
按(国家)分组%>%#按分组变量分组
切片(1:3)#每组挑选1到3行
输出:
Index Country
<dbl> <chr>
1 8.1 Germany
2 4.5 Italy
3 7.1 Italy
4 2.3 Italy
5 8.8 Russia
6 1.1 Singapore
7 6.2 Singapore
8 4.1 USA
9 2.1 USA
10 5.2 USA
索引国家
1 8.1德国
2.4.5意大利
3.7.1意大利
4.2.3意大利
5.8.8俄罗斯
6.1.1新加坡
7.6.2新加坡
8.4.1美国
9.2.1美国
10.5.2美国
这是否回答了您的问题?聚合的“正确”语法应该是aggregate(df,by=list(df$Country),FUN=head,3)
,但是aggregate
希望每个组返回一行,所以它会将额外的行作为额外的列添加,所以这并不好。