我有一个如下所示的列表:
> dput(res[1:10])
list(character(0), c("Luzhuang", "Laisu", "Peihui"), character(0),
c("Anjiangping", "Xinzhai", "Yongfeng"), character(0), character(0),
c("Puji", "Gaotun", "Banjingcun"), character(0), character(0),
character(0))
在此示例中,列表的长度为10.我想要返回一个矢量或data.frame,它也是10个元素长。
我尝试这样做的大多数方法都省略了character(0)
的元素或有其他问题。我最近的尝试是:
library(plyr)
geo <- rbind.fill(lapply(res, function(f) {
as.data.frame(Filter(Negate(is.null), f))
}))
我的预期输出是:
character(0)
Luzhuang Laisu Peihui
character(0)
Anjiangping Xinzhai Yongfeng
character(0)
character(0)
Puji Gaotun Banjingcun
character(0)
character(0)
character(0)
或类似的东西。我不在乎空白行是character(0)
还是NA
还是什么都没有。原因是列表是基于具有相同长度的数据框创建的(我的意思是data.frame =列表的长度),现在我想将列表中的值添加回data.frame。
如果它更容易,你可以做一个每个非空元素有1个单词的例子。
答案 0 :(得分:2)
这样就够了吗?
res <- list(character(0), c("Luzhuang", "Laisu", "Peihui"), character(0),
c("Anjiangping", "Xinzhai", "Yongfeng"), character(0), character(0),
c("Puji", "Gaotun", "Banjingcun"), character(0), character(0),
character(0))
res <- sapply(res, function(s) if (length(s) == 0) NA_character_ else paste(s, collapse = " "))
res
# [1] NA "Luzhuang Laisu Peihui"
# [3] NA "Anjiangping Xinzhai Yongfeng"
# [5] NA NA
# [7] "Puji Gaotun Banjingcun" NA
# [9] NA NA
从这里开始,将它放在data.frame中是直截了当的。