我的数据如下:
lis=list(NULL, NULL, structure(c("A", "30", "5"), .Dim = c(3L, 1L), .Dimnames = list(
c("Name", "M", "E") , "foo")), structure(c("B", "19",
"9"), .Dim = c(3L, 1L), .Dimnames = list(c("Name", "M", "E"), "foo")))
结合:
dat=do.call(cbind, lis)
这里我想用真正的对应关系(来自lis的索引)替换foo
期望的输出:
3 4
Name "A" "B"
M "30" "19"
E "5" "9"
答案 0 :(得分:2)
你可以做到
as.data.frame(Filter(Negate(is.null), lis))
# foo foo.1
#Name A B
#M 30 19
#E 5 9
说明:在将条目转换为Filter(Negate(is.null), lis)
之前,NULL
会从list
中删除data.frame
个条目。
使用list
条目的索引替换列名
setNames(
data.frame(Filter(Negate(is.null), lis)),
which(sapply(lis, function(x) !is.null(x))))
# 3 4
#Name A B
#M 30 19
#E 5 9
答案 1 :(得分:2)
如果我理解正确,您希望标签dat
的列与索引中lis
的方式相匹配。但是,lis
没有名称,只有输出中显示的自动编号。您可以使用seq_along
进行模拟并过滤掉NULL
元素:
colnames(dat) <- seq_along(lis)[!sapply(lis,is.null)]
dat
3 4
Name "A" "B"
M "30" "19"
E "5" "9"
如果lis
确实有名称,您可以使用names(lis)
代替seq_along
。