【问题标题】:R remove rows from dataframe after occurrences of a value reach a limitR在值的出现达到限制后从数据框中删除行
【发布时间】:2026-02-19 16:05:04
【问题描述】:

我有一个按第一个值排序的 R 数据框。

每个第一个值有许多不同的行。

我想保留每个第一个值的前 200 行,并删除所有其他值。

例如,如果我从 300 开始 “1 随便...”行和 400 “2 随便...”行, 我想要的是 400 行:前 200 个“1”行,然后是前 200 个“2”行。

提前谢谢...

【问题讨论】:

  • 请让这个问题可重现。这包括示例代码(包括列出非基础 R 包)、示例数据(例如,dput(head(x)))和预期输出。参考:*.com/questions/5963269*.com/help/mcve*.com/tags/r/info
  • 虽然如果我不得不猜测,它可能类似于do.call(rbind.data.frame, by(mtcars, mtcars$cyl, head, n=3))

标签: r rows counting


【解决方案1】:

请让答案在未来可重复,并附上您已经尝试过哪些步骤的信息。示例数据是另一个有用的工具,可以帮助我们更快地回复您。

这是我使用dplyr 包编写的一个小例子:

library(dplyr)    # group_by() and top_n() 
library(magrittr) # %>% - piping function

data <- data.frame(X=c(rep(1,300),rep(2,300)), Y=1:600)

subdata <- data %>%
    group_by(X) %>%
    top_n(200)

这将以 400 行、200 个“1”行和 200 个“2”行结束。如果您有任何问题,请告诉我。

【讨论】:

  • 谢谢;这部分有效。我做了你所说的一切,使用我的数据框;但是当我导出子数据并查看它时,有 247 行带有 userID 的第一个值(我的数据框中的第一列),然后是 222 行带有下一个 userID 值,然后是 215 行带有下一个值,然后是 235下一个,等等。所以这是修剪每个用户 ID 的行数,但不是统一的。之前没用过dplyr,不知道为什么。
  • 这很奇怪,你能用dput(data) 命令给我看你的数据吗?如果某些事情是因素或某些事情,可能会发生一些奇怪的事情,但我可以做一些测试,看看我是否可以重现您的问题
  • 好的,谢谢。我用 dput 输出文件。是219K,3400行(原来是12600行)。我不能只是附上它,可以吗?第一行看起来像: structure(list(userID = c(78L, 78L, 78L, 78L, 78L, 78L, 78L, 78L, 78L, 78L, 78L, 78L, 78L, 78L, 78L, 78L, 78L, 78L, 78L、78L,所以对于用户 78 的所有线路都没有,那么下一条......我可以给你吗?- Phil Rennert 5 分钟前