按唯一行计算重复行

时间:2019-09-27 11:04:43

标签: r data.table

我认为这个非常简单的问题有一个非常简单的解决方案,但我无法弄清楚。

让我们说我有一个数据表,其中有一些重复的行(第3行和第4行相同)

dt <- data.table( val1 = c(1,2,3,3,4,5,6), val2 = 8 )             
#    val1 val2
# 1:    1    8
# 2:    2    8
# 3:    3    8
# 4:    3    8
# 5:    4    8
# 6:    5    8
# 7:    6    8

我想扔掉重复使用的行,仅保留唯一的行,并引入一个新列val3,该列指示在原始数据中多久出现一次行

预期输出:

dt.output <- data.table( val1 = c(1,2,3,4,5,6), val2 = 8, val3 = c(1,1,2,1,1,1) )             
#    val1 val2 val3
# 1:    1    8    1
# 2:    2    8    1
# 3:    3    8    2
# 4:    4    8    1
# 5:    5    8    1
# 6:    6    8    1

使用unique(dt)[, val3 := ....]进行更新联接时,我已经快要到了,但是我无法获得...部分来返回我想要的东西,这使我发疯。

1 个答案:

答案 0 :(得分:3)

简单

dt[, .(val3 = .N), by = .(val1, val2)]

或者继续您的第一种方法,可能会执行以下操作:

unique(dt)[, val3 := dt[.SD, on = .(val1, val2), .N, by = .EACHI][, N]][]

请注意,您也可以在by中使用字符向量:

byvars <- grep("val\\d+", names(dt), value = TRUE)
dt[, .(val3 = .N), by = byvars]