使用 data.table 创建一个计算唯一值的新列
Create a new column with data.table that count unique values
ID
1
1
2
3
3
3
3
我想创建一个包含数据 table 的附加列,用于计算唯一的 1、2、3 等并对它们求和。最后的 dat.table 将是
ID
CountID
1
2
1
2
2
1
3
4
3
4
3
4
3
4
我正在尝试这个但不起作用:
df[, CountID := uniqueN(df, by = ID)]
使用dplyr
包
df1 = group_by(df, id) %>% count()
merge(df, df1)
id n
1 1 3
2 1 3
3 1 3
4 2 1
5 3 4
6 3 4
7 3 4
8 3 4
9 4 2
10 4 2
数据
df = data.frame('id' = c( 1 , 1 , 1, 2, 3, 3, 3, 3, 4, 4))
data.table
您可以使用 .N
这样做:
library(data.table)
DT[, CountID := .N, by = ID]
DT
# ID CountID
# <int> <int>
# 1: 1 2
# 2: 1 2
# 3: 2 1
# 4: 3 4
# 5: 3 4
# 6: 3 4
# 7: 3 4
基础 R
DT$CountID2 <- ave(rep(1L, nrow(DT)), DT$ID, FUN = length)
数据
DT <- setDT(structure(list(ID = c(1L, 1L, 2L, 3L, 3L, 3L, 3L), CountID = c(2L, 2L, 1L, 4L, 4L, 4L, 4L)), class = c("data.table", "data.frame"), row.names = c(NA, -7L)))
ID |
---|
1 |
1 |
2 |
3 |
3 |
3 |
3 |
我想创建一个包含数据 table 的附加列,用于计算唯一的 1、2、3 等并对它们求和。最后的 dat.table 将是
ID | CountID |
---|---|
1 | 2 |
1 | 2 |
2 | 1 |
3 | 4 |
3 | 4 |
3 | 4 |
3 | 4 |
我正在尝试这个但不起作用:
df[, CountID := uniqueN(df, by = ID)]
使用dplyr
包
df1 = group_by(df, id) %>% count()
merge(df, df1)
id n
1 1 3
2 1 3
3 1 3
4 2 1
5 3 4
6 3 4
7 3 4
8 3 4
9 4 2
10 4 2
数据
df = data.frame('id' = c( 1 , 1 , 1, 2, 3, 3, 3, 3, 4, 4))
data.table
您可以使用 .N
这样做:
library(data.table)
DT[, CountID := .N, by = ID]
DT
# ID CountID
# <int> <int>
# 1: 1 2
# 2: 1 2
# 3: 2 1
# 4: 3 4
# 5: 3 4
# 6: 3 4
# 7: 3 4
基础 R
DT$CountID2 <- ave(rep(1L, nrow(DT)), DT$ID, FUN = length)
数据
DT <- setDT(structure(list(ID = c(1L, 1L, 2L, 3L, 3L, 3L, 3L), CountID = c(2L, 2L, 1L, 4L, 4L, 4L, 4L)), class = c("data.table", "data.frame"), row.names = c(NA, -7L)))