如何从R中的每个类别中获取x行?

如何从R中的每个类别中获取x行?,r,R,我有一个包含很多行的矩阵,比如说每个类别有5000多行,我希望每个类别有4500行。在R怎么做 我知道这是唯一的,但这是得到每个类别只有一个元素,但我需要N个元素每个类别 以下是我的数据: cat f1 f2 f3 1 a 15 20 sdr 2 b 8 6 zrf 3 a 54 6 sf 4 c 32 8 azr 5 b 65 98

我有一个包含很多行的矩阵,比如说每个类别有5000多行,我希望每个类别有4500行。在R怎么做

我知道这是唯一的,但这是得到每个类别只有一个元素,但我需要N个元素每个类别


以下是我的数据:

    cat    f1    f2    f3
1   a      15    20    sdr
2   b      8     6     zrf
3   a      54    6     sf
4   c      32    8     azr
5   b      65    98    arfg
....

一种“蛮力”方法是按组分割数据,然后只取
N
行的
head
。然后,只需将它们绑定在一起,即可创建新的
data.frame
。这就是“拆分-应用-合并”的本质

df <- data.frame(group=rep(c("A","B"), each=10), var=rnorm(20))

# Number of Rows
N <- 5
# the split, apply(i.e. head), combine approach
do.call("rbind", lapply(split(df, f=df$group), function(x) head(x, n=N)))
编辑

正如下面@akrun所建议的,如果对象是
data.frame

library(dplyr)
df %>% 
    group_by(group) %>% 
    slice(seq(N))

一种“蛮力”方法是按组分割数据,然后只取
N
行的
head
。然后,只需将它们绑定在一起,即可创建新的
data.frame
。这就是“拆分-应用-合并”的本质

df <- data.frame(group=rep(c("A","B"), each=10), var=rnorm(20))

# Number of Rows
N <- 5
# the split, apply(i.e. head), combine approach
do.call("rbind", lapply(split(df, f=df$group), function(x) head(x, n=N)))
编辑

正如下面@akrun所建议的,如果对象是
data.frame

library(dplyr)
df %>% 
    group_by(group) %>% 
    slice(seq(N))

OPs数据在一个矩阵中。我有一个问题:类别已更改:a变为a.NUMBER,因此现在每个类别有N个不同的类别:D@sop那些只是船名。不应更改组本身。只需设置你的
行名(新数据)LOL,我还没有看到它是一个行名。。。如果数据是data.frame,则为sorry。带有dplyr的选项是
library(dplyr);df%>%group_by(group)%>%slice(seq(N))
OPs数据位于矩阵中。我有一个问题:类别已更改:a变为a.NUMBER,因此我现在每个类别有N个不同的类别:D@sop那些只是船名。不应更改组本身。只需设置你的
行名(新数据)LOL,我还没有看到它是一个行名。。。如果数据是data.frame,则为sorry。带有dplyr的选项是
library(dplyr);df%>%group_by(group)%>%slice(seq(N))
您能提供一些示例数据吗?您的数据实际上是一个
矩阵
还是一个
数据帧
?如果是前者,您的组是如何定义的?您能提供一些示例数据吗?您的数据实际上是一个
矩阵
还是一个
数据帧
?如果是前者,您的团队是如何定义的?