将计数字段添加到数据框

时间:2014-07-10 15:54:15

标签: r dataframe

我有以下数据框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)))

3 个答案:

答案 0 :(得分:0)

如果按subjectid

排序dat
   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