【发布时间】:2023-03-21 03:35:02
【问题描述】:
我有一个像这样的大型 data.frame:
+--------+---------+
| A | B |
+--------+---------+
| USA | Chicago |
+--------+---------+
| USA | Chicago |
+--------+---------+
| France | Paris |
+--------+---------+
| Italy | Rome |
+--------+---------+
| France | Nice |
+--------+---------+
| Italy | Venice |
+--------+---------+
即
AB <- structure(list(A = c("USA", "France", "Italy", "France", "Italy",
"USA"), B = c("Chicago", "Paris", "Rome", "Nice", "Venice", "Chicago"
)), row.names = c(NA, -6L), class = "data.frame")
我想创建一个这样的列表:
list(USA = list("Chicago"), France = list("Paris", "Nice"), Italy = list(
"Rome", "Venice"))
这就是我现在正在做的事情。
unique.As <- unique(AB$A)
ABL <- lapply(unique.As, function(current.A) {
return(unique(AB$B[AB$A == current.A]))
})
names(ABL) <- unique.As
编辑
我之前写过,列出一个包含 65k 行的 data.frame 大约需要 10 分钟。我今天意识到,几乎所有这些时间都来自我上面没有显示的 lapply 循环中的另一个步骤。
下面akrun的解决方案还是更快更优雅!
【问题讨论】: