【问题标题】:Drop all rows in a data frame from first match through to last row删除数据框中从第一个匹配到最后一行的所有行
【发布时间】:2017-06-26 23:12:45
【问题描述】:

我想删除数据框中从匹配条件的第一行到最后一行的所有行。

这是我在 base R 中得到的,找到 disp 为 400 的行,并将该行和该行中的所有行删除到最后一行:

mtcars[-c(which(mtcars$disp == 400):nrow(mtcars)), ]

如何使用 dplyr 和/或 data.table 做到这一点?

【问题讨论】:

  • head(mtcars, match(400, mtcars$disp)-1)
  • 另请注意,您的代码有点笨拙,因为which 返回400 的所有匹配项,然后在: 序列中只使用第一个匹配项。注意mtcars[-c(which(mtcars$disp==360):nrow(mtcars)),]上的警告
  • 感谢您的浏览。从第一场比赛开始就可以了,因为这实际上是这里的目标,正如我在 Q“第一场比赛到最后一行”中所写的那样。
  • 感谢您的浏览。从第一场比赛开始就可以了,因为这实际上是这里的目标,正如我在 Q“第一场比赛到最后一行”中所写的那样。

标签: r dataframe data.table dplyr


【解决方案1】:

dplyr 中,您可以在filter 中使用cumsum。一旦你达到前 400,cumsum 就会增加到 1。

mtcars%>%
  filter(cumsum(disp==400)<1)

这是data.table 中的等价物:

mtcars <- as.data.table(mtcars)
mtcars[cumsum(disp==400)<1]

【讨论】:

    猜你喜欢
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    相关资源
    最近更新 更多