gpt4 book ai didi

r - 使用最普遍的列值交换 data.table 列

转载 作者:行者123 更新时间:2023-12-01 08:43:15 25 4
gpt4 key购买 nike

我有数据

test = data.table(
a = c(1,1,3,4,5,6),
b = c("a", "be", "a", "c", "d", "c"),
c = rep(1, 6)
)

我希望获取列 a 的唯一值,将其存储在另一个 data.table 中,然后用剩余列中最普遍的值填充剩余列,这样我的结果data.table 将是:

test2 = data.table(a = c(1,3,4,5,6), b = "a", c = 1)

be 列有相同数量的“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 =)

EDIT2:正如@MichaelChirico 指出的那样,我们如何保持类(class)。尽管@chinsoon12 的解决方案确实有效,但使用以下 data.table 的一些解决方案不起作用:

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"))

最佳答案

另一种选择:

dtmode <- function(x) x[which.max(rowid(x))]
test[, .(A=unique(A), B=dtmode(B), C=dtmode(C))]

数据:

test = data.table(
A = c(1,1,3,4,5,6),
B = c("a", "be", "a", "c", "d", "c"),
C = rep(1, 6)
)

关于r - 使用最普遍的列值交换 data.table 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60228938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com