使用R,我想创建一个新列(MaxAct),显示不同列(ActNo)的最大数量,同时按两个因子分组(HHID和PERID)
例如,我有这个数据集:
UID HHID PERID ActNo
1   1000 1     1
2   1000 1     2
3   1000 1     3
4   1000 2     1
5   1000 2     2
6   2000 1     1
7   2000 1     2
8   2000 1     3
9   2000 1     4
10  2000 2     1
11  2000 2     2
然后我想添加新列(MaxAct),如下所示:
UID HHID PERID ActNo MaxAct
1   1000 1     1     3
2   1000 1     2     3
3   1000 1     3     3
4   1000 2     1     2
5   1000 2     2     2
6   2000 1     1     4
7   2000 1     2     4
8   2000 1     3     4
9   2000 1     4     4
10  2000 2     1     2
11  2000 2     2     2
dat$MaxAct <- with(dat, ave(ActNo, HHID, PERID, FUN=max) )
对于涉及单个向量和分组的问题,您希望结果的长度等于行数,ave是您的选择功能.对于更复杂的问题,lapply(split(dat, fac), FUN)可能需要或使用该方法do.call(rbind, by( ...)) 
如果您缺少值:
dat$MaxAct <- with(dat, ave(ActNo, HHID, PERID, FUN=function(x) max(x, na.rm=TRUE) )  )
这是plyr与mutate或者transform基地R ave  或data.table(在这里可能被认为是花生的大锤)的标准票价.
这些plyr和ave  方法已得到解决
library(data.table)
DT <- data.table(DF)
DT[,MaxAct := max(ActNo), by = list(HHID, PERID)]
考虑到数据的大小,data.table可能不需要存储器有效且快速的特性   .
已阅读上一个问题如何在R中进行分组时创建等级列,因此我们知道这max(ActNo)只是每个组中的行数
DT[,MaxAct := .N, by = list(HHID, PERID)]
会工作,而且会更快.
| 归档时间: | 
 | 
| 查看次数: | 4833 次 | 
| 最近记录: |