我有一个关于行为的大型数据集。我的专栏之一称为“会话”,表示某些事件发生在哪个会话中。另一列称为“id”,指示事件所属的个人。所以,例如有多个会话= 230的条目,其中一个属于个人A,另一个属于个人B。现在还有另一个重要的列,称为fas。 fas 有 1 或 0,具体取决于某个事件是否发生。
我知道如何从数据库中删除 fas == 1 的所有行,但我想删除所有具有 fas 的会话,即使该列中显示 fas == 0。示例:在会话 230 中,我看到了两个人。 A 和 B。对于 A 有一个 fas,所以 fas == 1。但是对于同一会话中的 B,没有 fas,所以 fas == 0。现在我想删除这两列,因为在会话 230 中有一个fas 这意味着我无法使用任何数据。我该怎么做?
对于下面的示例,理想情况下我希望用一行代码删除会话 230(第 1 行和第 2 行)和 231(第 3 行)。
我尝试了 ifelse 函数来查看是否可以创建另一列,该列将使用 1 或 0 标记会话的所有行,然后我可以对该列中的值删除条件,但我无法使其工作。类似的东西
ifelse(data$session == data[data$fas == 1,]$session, add_column(drop = 1))
如果存在更好的选择,则不必是 ifelse
可重现的示例:
session <- c("230", "230", "231", "232", "232")
id <- c("A","B","C","D", "E")
fas <- c(1,0,1,0,0)
df <- data.frame(session, id, fas)
会议 | id | 法斯 |
---|---|---|
230 | A | 1 |
230 | B | 0 |
231 | C | 1 |
232 | D | 0 |
232 | E | 0 |
它可能会导致类似的结果,如果 drop == 1 ,我就可以删除所有行
会议 | id | 法斯 | 滴 |
---|---|---|---|
230 | A | 1 | 1 |
230 | B | 0 | 1 |
231 | C | 1 | 1 |
232 | D | 0 | 0 |
232 | E | 0 | 0 |
使用
%in%
检查会话集,其中 fas == 1
:
df <- data.frame(session, id, fas)
transform(df, drop = session %in% session[fas == 1])
#> session id fas drop
#> 1 230 A 1 TRUE
#> 2 230 B 0 TRUE
#> 3 231 C 1 TRUE
#> 4 232 D 0 FALSE
#> 5 232 E 0 FALSE