尽管使用了字符(0)元素,但在保持维度的同时将列表转换为vector / df

时间:2016-07-13 22:10:47

标签: r

我有一个如下所示的列表:

> 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个单词的例子。

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中是直截了当的。