如何根据不同列中的变量删除 R 中的列?

问题描述 投票:0回答:1

我有一个关于行为的大型数据集。我的专栏之一称为“会话”,表示某些事件发生在哪个会话中。另一列称为“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
r if-statement rstudio
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.