我想知道在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]]
。
因此,我想在列表列表中更改层次结构。
任何帮助表示赞赏!
答案 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"