-2

我有一个基本上如下所示的数据框“论坛”:

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

有没有办法在不预先制作所有计数的情况下做到这一点?

4

2 回答 2

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

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")
于 2013-04-15T08:41:36.423 回答
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函数,想想如果你对一个逻辑向量求和会发生什么。

于 2013-04-15T08:43:38.540 回答