我有一个简单的数据框架,如下所示。
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行显示4,在第3:4行显示5:6。
我想让第二列准确地表示行中出现的特定ID的实例。因此,行1是"1“的第一个实例,因此它被指定为1,而行2是"1”的第二个实例,因此它将被指定为2。行3是"2“的第一个实例,因此它被指定为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
发布于 2018-06-27 05:20:50
使用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
https://stackoverflow.com/questions/51051465
复制相似问题