重新排列R中列表列表中的层次结构

时间:2014-11-12 15:31:21

标签: r list hierarchy

我想知道在R中是否存在一种简单的方法来执行以下操作:

假设我有四辆车的大量数据:白色宝马,黑色宝马,白色GMC和黑色GMC。
我将它们放在名为cars的列表列表中:

白色宝马数据在cars[[1]][[1]]
黑色宝马数据在cars[[1]][[2]]
白色GMC上的数据位于cars[[2]][[1]]
黑色GMC上的数据位于cars[[2]][[2]]

在这种情况下,第一个坐标表示汽车的制造,而第二个坐标表示汽车的颜色。

我现在希望交换坐标,以便第一个坐标指示颜色,而第二个坐标指示汽车的颜色:

白色宝马数据在cars[[1]][[1]]
黑色宝马数据在cars[[2]][[1]]
白色GMC上的数据位于cars[[1]][[2]]
黑色GMC上的数据位于cars[[2]][[2]]

因此,我想在列表列表中更改层次结构

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:2)

对同一样本数据的另一种解决方案

cars <- list(list("white BMW", "black BMW"), list("white GMC", "black GMC"))

do.call(function(...) Map(list, ...), cars)

保持元素的名称不变。

答案 1 :(得分:1)

我不认为这是列表的超级常见任务。如果您以平面方式存储数据并根据需要对其进行子集化,这听起来会好得多。不过,这是你可以交换的一种方式。使用示例输入

cars <- list(list("white BMW", "black BMW"), list("white GMC", "black GMC"))

你可以做到

i <- 1:length(cars)
j <- 1:length(cars[[1]])
swap<-lapply(j, function(j) lapply(i, function(i) cars[[i]][[j]]))

比较

cars[[2]][[1]]
# [1] "white GMC"
swap[[2]][[1]]
# [1] "black BMW"