我有数据
test = data.table(
a = c(1,1,3,4,5,6),
b = c("a", "be", "a", "c", "d", "c"),
c = rep(1, 6)
)
我希望将列a的唯一值提取出来,并存储在另一个数据表中,然后用剩余列中最常见的值填充剩下的列,以使得我的结果数据表如下:
test2 = data.table(a = c(1,3,4,5,6), b = "a", c = 1)
该列包含相等数量的 "a" 和 "c",但在这些情况下选择哪一个并不重要。
目前的尝试:
test2 = unique(test, by = "a")
test2[, c("b", "c") := lapply(.SD, FUN = function(x){test2[, .N, by = x][order(-N)][1,1]}), .SDcols = c("b", "c")]
编辑: 我更倾向于一个通用解决方案,与我指定要“唯一化”的列以及其余列使用单个最普遍值的函数兼容。因此,我使用了lapply和.SD =)
编辑2: 正如@MichaelChirico所指出的那样,我们如何保持类别(数据类型)。对于以下data.table中的解决方案中的一些解决方案不起作用,尽管@chinsoon12的解决方案起作用:
test = data.table(a = c(1,1,3,4,5,6),
b = c("a", "be", "a", "c", "d", "c"),
c = rep(1, 6),
d = as.Date("2019-01-01"))