我正在与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个操作。
- 计算每个用户名/角色组合的观察次数
- 放弃每个组合的观察次数,并计算每个用户名的角色数
- 限制为只有一个角色的用户名,并返回用户名的矢量