名单,我有以下数据表:更简单的方法来创建数据表中的R
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
@Frank,当然'dt [,。(ys =。(y)),by = x] [,ys]'给出了OP想要的内容。甚至更简单的'dt [,。(。(y)),x] [,V1]' – dww
@dww谢谢,是的。我想这可能不如'unname(with(dt,split(y,x)))'更有效,如果这是OP真正坚持的输出,这看起来更直接。 – Frank