名單,我有以下數據表:更簡單的方法來創建數據表中的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