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



我正在与R一起分析一个在线社区数据集。我真的很感谢你的帮助,因为我遇到了一个问题。以下是一个概要:

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

问题:我想从数据集中删除所有在任何在线社区中仅作为成员或用户活动的用户。如果他们是几个在线社区的活跃成员,我也想删除他们。换句话说,我想删除用户"橙色"、"紫色"、"黑色"one_answers"白色"。重要提示:数据集包含>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*

我假设注释中的断言是正确的。

使用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个操作。

  1. 计算每个用户名/角色组合的观察次数
  2. 放弃每个组合的观察次数,并计算每个用户名的角色数
  3. 限制为只有一个角色的用户名,并返回用户名的矢量

相关内容

最新更新