从R中的数据表创建列表的更简单方法

时间:2016-12-05 22:35:44

标签: r list data.table

我有以下数据表:

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

2 个答案:

答案 0 :(得分:1)

使用split功能:

dt2 <- split(dt, dt$x)

您可以操纵d2然后只提取列表的第二部分(y),如果您想要的话。

答案 1 :(得分:1)

我会使用split.data.table(可从1.9.8 +获得):

split(dt, by="x", keep.by=FALSE)

如果你想获得vector而不是单列data.table,你可以将其包含到lapply(., unlist)中:

lapply(split(dt, by="x", keep.by=FALSE), unlist, use.names=FALSE)