【发布时间】:2016-12-05 22:35:43
【问题描述】:
我有如下数据表:
dt <- data.table(x = c("Allen", "Brandon", "Allen", "Brandon", "Chris", "Chris"),
y = c("orange", "red", "blue", "gold", "black", "white"))
print(dt)
# x y
#1 Allen orange
#2 Brandon red
#3 Allen blue
#4 Brandon gold
#5 Chris black
#6 Chris white
我想将其转换为列表格式,使用dt$x 用于列表中断:
print(dt2)
[[1]]
[1] "orange" "blue"
[[2]]
[1] "red" "gold"
[[3]]
[1] "black" "white"
我目前这样做的方式是使用以下函数,但我正在寻找一种更有效的解决方案来创建列表,因为我的真实数据集包含 100k~ 行。
dt.f <- function(a) {
j <- dt[x == a, ]
j2 <- as.vector(j$y)
}
dt2 <- do.call("list", lapply(unique(dt$x), function(a) dt.f(a)))
【问题讨论】:
-
您可以交替使用
dt[, .(ys = .(y)), by=x](另一种格式)。 -
@Frank 当然还有
dt[, .(ys = .(y)), by=x][,ys]给出了 OP 想要的。或者更简单的dt[, .(.(y)), x][,V1] -
@dww 谢谢,是的。我想这可能比
unname(with(dt, split(y,x)))效率低,这似乎更直接,如果这是 OP 真正坚持的输出。
标签: r list data.table