具有计数值的新数据帧

时间:2013-04-15 08:18:25

标签: r dataframe

我有一个数据框"论坛"基本上看起来像这样:

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: ...

如果没有预先制作所有计数,有没有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

使用plyrsummarise

# 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函数,并考虑如果对逻辑向量求和会发生什么。