首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据条件删除数据帧的N行

如何根据条件删除数据帧的N行
EN

Stack Overflow用户
提问于 2016-02-22 00:56:00
回答 2查看 8.5K关注 0票数 3

我的问题来自How to find tail rows of a data frame that satisfy set criteria?,因此,我的(更新的)示例数据的结构如下:

代码语言:javascript
复制
Individ <- data.frame(Participant = c("Bill", "Bill", "Bill", "Bill", "Bill", "Jane", "Jane", "Jane", "Jane", "Jane", "Jane", "Jane", "Jane", "Jane", "Jane", "Jane", "Jane", "Bill", "Bill", "Bill", "Bill"),  
                      Time = c(1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4),
                      Condition = c("Placebo", "Placebo", "Placebo", "Placebo", "Placebo", "Expr", "Expr", "Expr", "Expr", "Expr", "Expr", "Placebo", "Placebo", "Placebo", "Placebo", "Placebo", "Placebo", "Expr", "Expr", "Expr", "Expr"),
                      Location = c("Home", "Home", "Home", "Home", "Home", "Home", "Home", "Home", "Home", "Home", "Home", "Home", "Home", "Home", "Home", "Home", "Home", "Away", "Away", "Away", "Away"),
                      Power = c(400, 250, 180, 500, 300, 600, 512, 300, 500, 450, 200, 402, 210, 130, 520, 310, 451, 608, 582, 390, 570))

我已经学会了根据每个Participant在不同的Condition + Location上最后出现的Power来找到它们的尾行。现在,我希望从每个Participant中删除每个ConditionLocation的最后3行。但是,为每个ParticipantCondition收集的Participant不同,因此我不能完全基于标准化的Time删除行。

如何快速遍历每个Participant及其各自的Condition+ Location并删除最后3行?我的实际数据框架是400万行+,有50多个参与者,所以理想情况下,在每个ParticipantCondition上迭代的解决方案是可取的。

我的预期产出如下:

代码语言:javascript
复制
Output <- data.frame(Participant = c("Bill", "Bill", "Jane", "Jane", "Jane", "Jane", "Jane", "Jane", "Bill"),
                     Time = c(1, 2, 1, 2, 3, 1, 2, 3, 1),
                     Condition = c("Placebo", "Placebo", "Expr", "Expr", "Expr", "Placebo", "Placebo", "Placebo", "Expr"),
                     Location = c("Home", "Home", "Home", "Home", "Home", "Home", "Home", "Home", "Away"),
                     Power = c(400, 250, 600, 512, 300, 402, 210, 130, 608))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-22 01:19:53

如果你用dplyrrow_number()n()..。

代码语言:javascript
复制
library(dplyr)
Individ %>%
  group_by(Participant, Condition, Location) %>%
  filter(row_number() < n() - 2)

返回

代码语言:javascript
复制
Source: local data frame [9 x 5]
Groups: Participant, Condition, Location [4]

  Participant  Time Condition Location Power
       (fctr) (dbl)    (fctr)   (fctr) (dbl)
1        Bill     1   Placebo     Home   400
2        Bill     2   Placebo     Home   250
3        Jane     1      Expr     Home   600
4        Jane     2      Expr     Home   512
5        Jane     3      Expr     Home   300
6        Jane     1   Placebo     Home   402
7        Jane     2   Placebo     Home   210
8        Jane     3   Placebo     Home   130
9        Bill     1      Expr     Away   608
票数 2
EN

Stack Overflow用户

发布于 2016-02-22 03:34:38

使用data.table的选项。我们将“data.frame”转换为“data.table”(setDT(Individ)),按“参与者”、“条件”和“位置”分组,使用head删除每个组合的最后3个观察值。

代码语言:javascript
复制
library(data.table)
setDT(Individ)[, head(.SD, -3) , .(Participant, Condition, Location)]
#   Participant Condition Location Time Power
#1:        Bill   Placebo     Home    1   400
#2:        Bill   Placebo     Home    2   250
#3:        Jane      Expr     Home    1   600
#4:        Jane      Expr     Home    2   512
#5:        Jane      Expr     Home    3   300
#6:        Jane   Placebo     Home    1   402
#7:        Jane   Placebo     Home    2   210
#8:        Jane   Placebo     Home    3   130
#9:        Bill      Expr     Away    1   608

dplyr中的等效选项是

代码语言:javascript
复制
library(dplyr)
Individ %>% 
     group_by(Participant, Condition, Location) %>% 
     do(head(., -3))
#  Participant  Time Condition Location Power
#       (fctr) (dbl)    (fctr)   (fctr) (dbl)
#1        Bill     1      Expr     Away   608
#2        Bill     1   Placebo     Home   400
#3        Bill     2   Placebo     Home   250
#4        Jane     1      Expr     Home   600
#5        Jane     2      Expr     Home   512
#6        Jane     3      Expr     Home   300
#7        Jane     1   Placebo     Home   402
#8        Jane     2   Placebo     Home   210
#9        Jane     3   Placebo     Home   130
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35544180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档