(请随意将标题更改为更合适的内容)
我有一个如下所示的列表列表。我想要做的是将每个嵌套列表的每个名称cbind
到该列表中的新列。另外,我想通过/
来strsplit
每个names
,所以实际上cbind
是两列,即Nrep=rep1 和 sp=sp1,每个的行数与嵌套列表本身相同。
`rep1/sp1` <- read.table(text= "var,X2x,X4x,X6x
101337,4.631833,4.4547,11.097333
345754,3.727433,10.8560,10.536600" ,header=TRUE, sep=",")
`rep1/sp2` <- read.table(text= "var,X2x,X4x,X6x
101337,5.631833,10.4547,11.097333
345754,5.727433,12.8560,10.536600" ,header=TRUE, sep=",")
dflist <- list(`rep1/sp1`=`rep1/sp1`, `rep1/sp2`=`rep1/sp2`)
我的想法是尝试分两步完成;将 names
+ strsplit
提取出来,然后将每个 cbind
提取到正确的嵌套列表,产生如下所示的输出。但是,我不知道如何进行最后一步。
rep_sp <- names(dflist)
rep_sp <- strsplit(rep_sp, "/")
rep_sp <- lapply(rep_sp, function(x) data.frame(t(cbind(x))))
rep_sp <- ldply(rep_sp, data.frame)
colnames(rep_sp) <- c("Nrep","sp")
# hit the wall...
期望的输出
> dflist
$`rep1/sp1`
Nrep sp var X2x X4x X6x
rep1 sp1 101337 4.631833 4.4547 11.09733
rep1 sp1 345754 3.727433 10.8560 10.53660
$`rep1/sp2`
Nrep sp var X2x X4x X6x
rep1 sp2 101337 5.631833 10.4547 11.09733
rep1 sp2 345754 5.727433 12.8560 10.53660
任何有关此问题的指示都将非常感激,谢谢!
最佳答案
如果它们不必是第一列和第二列,那么
rep_sp <- names(dflist)
rep_sp <- strsplit(rep_sp, "/")
Map(cbind, dflist,
Nrep = sapply(rep_sp,'[',1),
sp = sapply(rep_sp,'[',2))
可以工作并且非常简单(仅使用基本函数)
$`rep1/sp1`
var X2x X4x X6x Nrep sp
1 101337 4.631833 4.4547 11.097333 rep1 sp1
2 345754 3.727433 10.8560 10.536600 rep1 sp1
$`rep1/sp2`
var X2x X4x X6x Nrep sp
1 101337 5.631833 10.4547 11.097333 rep1 sp2
2 345754 5.727433 12.8560 10.536600 rep1 sp2
我没有把它们放在第一位的原因是当你使用 Map
时它将使用您传递的第一个数据参数命名列表的元素。所以通过dflist
首先,我保留这些名字。您可以重新排列参数,然后只需使用类似 names(newobj)<-names(dflist)
的内容重置名称后记。
关于r - cbind i :th name of a list-of-lists to the i:th list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24088616/