在R的一列中对标识符的多个实例求和和计数

时间:2018-06-26 21:15:33

标签: r

我有一个简单的数据框,如下所示。

table1 <- setNames(data.frame(matrix(ncol = 3, nrow = 0)), c("ID","Gender","Smoke"))

table1[1,]=c("1","M","N")
table1[2,]=c("1","F","N")
table1[3,]=c("2","M","N")
table1[4,]=c("2","F","S")
table1[5,]=c("1","M","N")
table1[6,]=c("1","F","N")

  ID Gender Smoke
1  1      M     N
2  1      F     N
3  2      M     N
4  2      F     S
5  1      M     N
6  1      F     N

我想添加两列。第一列是对第1列中ID出现了多少个实例的计数。在这种情况下,ID“ 1”出现4次,ID“ 2”出现2次,所以我希望它在第1、2、5:6行显示4,在第3:4行显示2。

我希望第二列准确表示该行中已发生的特定ID的哪个实例。为此,第1行是“ 1”的第一个实例,因此被分配为1,而第2行是“ 1”的第二个实例,因此将被分配为2。第3行是“ 2”的第一个实例,因此被分配为1。分配为1,同样,第4行获得2,第5行获得3,第6行获得4。

最后,表格将如下所示:

  ID Gender Smoke IDTotal IDCount
1  1      M     N       4       1
2  1      F     N       4       2
3  2      M     N       2       1
4  2      F     S       2       2
5  1      M     N       4       3
6  1      F     N       4       4

1 个答案:

答案 0 :(得分:0)

使用data.table

df <- read.table(text = "ID Gender Smoke
1  1      M     N
                 2  1      F     N
                 3  2      M     N
                 4  2      F     S
                 5  1      M     N
                 6  1      F     N", header = T)

library(data.table)
setDT(df)
df[, IDTotal := .N, by = ID]
df[, IDCount := 1:.N, by = ID]

    ID Gender Smoke IDTotal IDCount
1:  1      M     N       4       1
2:  1      F     N       4       2
3:  2      M     N       2       1
4:  2      F     S       2       2
5:  1      M     N       4       3
6:  1      F     N       4       4