我有以下数据框dat
:
> dat
subjectid variable
1 1234 12
2 1234 14
3 2143 19
4 3456 12
5 3456 14
6 3456 13
如何添加另一列显示每个唯一subjectid
的计数?
ddply(dat,.(subjectid),summarize,quan_95=quantile(variable,0.95),uniq=count(unique(subjectid)))
答案 0 :(得分:0)
如果按subjectid
tbl <- table(dat[,1])
transform(dat, count=rep(tbl, tbl))
# subjectid variable count
#1 1234 12 2
#2 1234 14 2
#3 2143 19 1
#4 3456 12 3
#5 3456 14 3
#6 3456 13 3
答案 1 :(得分:0)
与ave()
类似,您也可以使用split / lapply / unsplit:
i = split(dat$variable, dat$subjectid)
count = unsplit(lapply(i, length), dat$subjectid)
然后使用count
或任何您喜欢的方法移植data.frame()
变量。
split()
函数只为dat$variable
的每个值创建dat$subjectid
值列表。通过使用lapply()
将length()
函数应用于列表中的每个索引(i),unsplit()
将所有内容放回原位,可以找到计数。
unsplit()
是纯粹的魔法和仙尘。我前100次都不相信。
答案 2 :(得分:0)
以下是dplyr
的方法。首先,我们按subjectid
进行分组,然后使用函数n()
计算每个组中的行数:
dat <- read.table(text="
subjectid variable
1 1234 12
2 1234 14
3 2143 19
4 3456 12
5 3456 14
6 3456 13")
library(dplyr)
dat %>%
group_by(subjectid) %>%
mutate(count = n())
subjectid variable count
1 1234 12 2
2 1234 14 2
3 2143 19 1
4 3456 12 3
5 3456 14 3
6 3456 13 3