我有一个简单的数据框,如下所示。
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
答案 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