我有一个数据框"论坛"基本上看起来像这样:
post-id: 1, 2, 3, 4, 5, ...
user-id: 1, 1, 2, 3, 4, ...
subforum-id: 1, 1, 1, 2, 3, ...
现在我尝试创建一个如下所示的新数据框:
subforum-id: 1, 2, 3, ...
number-of-users-that-posted-only-once-to-this-subforum: ...
number-of-users-that-posted-more-than-n-times-to-this-subforum: ...
如果没有预先制作所有计数,有没有办法做到这一点?
答案 0 :(得分:2)
使用plyr
和summarise
:
# N = 1 here
ddply(DF, .(subforum.id), summarise, once = sum(table(user.id) == 1),
n.times = sum(table(user.id) > N))
# subforum.id once n.times
# 1 1 1 1
# 2 2 1 0
# 3 3 1 0
这是data.frame
DF:
DF <- structure(list(post.id = 1:5, user.id = c(1, 1, 2, 3, 4),
subforum.id = c(1, 1, 1, 2, 3)),
.Names = c("post.id", "user.id", "subforum.id"),
row.names = c(NA, -5L), class = "data.frame")
答案 1 :(得分:2)
这是的一个基本想法让您入门:使用table
通过子论坛ID获取用户ID,并从那里开始工作:
> mydf <- structure(list(post.id = c(1, 2, 3, 4, 5), user.id = c(1, 1,
2, 3, 4), subforum.id = c(1, 1, 1, 2, 3)), .Names = c("post.id",
"user.id", "subforum.id"), row.names = c(NA, -5L), class = "data.frame")
> mytable <- with(mydf, table(subforum.id, user.id))
> mytable
user.id
subforum.id 1 2 3 4
1 2 1 0 0
2 0 0 1 0
3 0 0 0 1
提示:从那里,查看rowSums
函数,并考虑如果对逻辑向量求和会发生什么。