3

我曾希望使用 ddply 的 mode 函数按时间段查找某个用户最常见的字符串。

这与this question和this question有很大关系。

使用与此类似的数据集:

Data <- data.frame(
    groupname = as.factor(sample(c("red", "green", "blue"), 100, replace = TRUE)),
    timeblock = sample(1:10, 100, replace = TRUE),
    someuser = sample(c("bob", "sally", "sue"), 100, replace = TRUE))

我试过:

groupnameagg<- ddply(Data, .(timeblock, groupname, someuser), summarise, groupmode = mode(groupname))

但这并没有达到我的预期。它返回:

> head(groupnameagg$groupname)
[1] "numeric" "numeric" "numeric" "numeric" "numeric" "numeric"
  1. 如何按时间块按用户查找最常出现的组名?结果类似于:

    timeblock   username  mostcommongroupforuser
        1          bob     red
        1          sally   red
        1          sue     green
        2          bob     green
        2          sally   blue
        2          sue     red
  1. 如果 groupname 按级别组织,我如何获得每个时间块中的最高级别?
4

2 回答 2

4

认为聚合应该对两者都有效

第1部分

aggregate(Data$groupname,by=list(Data$timeblock,Data$someuser),
     function(x) { 
          ux <- unique(x) 
          ux[which.max(tabulate(match(x, ux)))] })

第2部分

aggregate(Data$groupname,by=list(Data$timeblock,Data$someuser),
     function(x) { 
         levels(Data$groupname)[max(as.numeric(x))] })
于 2013-06-23T21:33:48.297 回答
0

使用ddply来自plyr

ddply(Data, .(timeblock, groupname, someuser),
  function(x){as.character(
                    unique(
                      x$groupname[x$someuser==
                                    names(which.max(table(x$someuser)))
                        ]
                      )
                    )
              }
  )

    timeblock groupname someuser    V1
1          1      blue      bob  blue
2          1      blue    sally  blue
3          1     green      bob green
.........
于 2013-06-23T21:01:53.157 回答