如何删除 R 中仅出现在一个变量级别且从不出现第二个变量级别的所有参与者?

Posted

技术标签:

【中文标题】如何删除 R 中仅出现在一个变量级别且从不出现第二个变量级别的所有参与者?【英文标题】:How do I remove all participants in R that only occur with one single variable level and never with the second one? 【发布时间】:2016-03-31 15:58:33 【问题描述】:

我正在使用 R 分析在线社区数据集。非常感谢您的帮助,因为我遇到了一个问题。这是一个大纲:

数据集:每个用户的用户名都可用。每一行代表一个用户在一个在线社区中的活动。示例 a:第 1 行显示用户“blue”是在线社区 x 的“成员”,到目前为止他已向该社区贡献了一篇文章。示例 b:第 5 行显示用户“blue”也是在线社区 y 的“所有者”,到目前为止,他已向该社区 y 贡献了 2 个帖子。见下文!

问题:我想从数据集中删除所有仅作为成员或用户活跃的用户 - 在任何在线社区中。如果他们作为多个在线社区的成员活跃,我也想删除它们。换句话说,我想删除用户“橙色”、“紫色”、“黑色”和“白色”。重要提示:数据集包含 > 1Mio。行。我正在寻找一种考虑到这一点的方法:) 谢谢。

username role   # of posts

blue    member  1
blue    member  0
red     owner   6
red     owner   1
blue    owner   2
red     member  1
blue    owner   3
blue    member  2
blue    owner   1
blue    owner   0
red     member  8
green   owner   1
red     owner   2
red     member  3
green   member  4
yellow  owner   5
green   member  3
green   owner   4
yellow  owner   5
yellow  member  6
yellow  owner   8

*orange owner   1
orange  owner   2
purple  member  3
purple  member  4
black   owner   4
white   member  4*

【问题讨论】:

我不明白In other words, I want to remove the users 'orange', 'purple', 'black'and 'white' 与您的问题的其他描述有何关联。此外,似乎应该为在线社区增加一个专栏,因为从您的示例中并不清楚。 澄清一下,如果用户名不显示为 both ownermember? @Adam,在那种情况下,为什么red没有被删除,例如? 因为red 同时显示为成员和所有者(第 3、6 行) 亚当是对的。红色显示为成员和所有者。只有显示为 ONLY 成员或 ONLY 所有者的用户才能被删除。 【参考方案1】:

我假设我评论中的断言是正确的。

使用data.table 包,因为我有一个***的心情。请注意,转换为数据表会破坏您之后使用的任何数据框语法,因此如果您尝试将其插入其他代码,您需要在之后使用setDF(users2) 将其转换回来。

library('data.table')
setDT(users)
users_to_remove <- users[, .N, .(username, role)][, .N, username][N == 1, username]
users2 <- users[!(username %in% users_to_remove)]
print(setdiff(users$username, users2$username))

第 3 行可能有点难以理解,因为它链接了 3 个操作。

    计算每个用户名/角色组合的观察次数。 丢弃每个组合的观察次数并计算每个用户名的角色数。 仅限于只有 1 个角色的用户名,并返回用户名向量

【讨论】:

以上是关于如何删除 R 中仅出现在一个变量级别且从不出现第二个变量级别的所有参与者?的主要内容,如果未能解决你的问题,请参考以下文章

Java从不在方法中声明变量的访问级别,无论是不是是静态的[关闭]

如何在 TFS 中仅删除一个 Git 存储库?

在用R语言编程中,界面上出现了“+”号,是啥意思?如何删除错误的输入,如何清屏?谢谢

如果在 Flutter 中仅按下空格键,则会出现 VSCode 智能感知

R语言droplevels函数删除因子变量(factor)没有用到的级别(level)实战

如何使用 R 在向量中找到第二个非连续出现的值的索引?