如何在R中创建具有不同行长的数据帧?

时间:2018-04-05 15:11:43

标签: r dataframe

我有一个列表paths,如下所示?

守则是:

   for (each in paths)
   {
     print (each)
   }

输出结果为:

[1] "1" "2"
[1] "1" "2" "3"
[1] "1" "2" "3" "5"
[1] "1" "2" "4"
[1] "1" "2" "4" "5"
[1] "1" "3"
[1] "1" "3" "5"
[1] "1" "4"
[1] "1" "4" "5"
[1] "1" "5"
[1] "2" "3"
[1] "2" "3" "5"
[1] "2" "4"
[1] "2" "4" "5"
[1] "3" "5"
[1] "4" "5"

如何将此全部追加为数据帧的行。由于行长度不等,as.data.frame失败。

3 个答案:

答案 0 :(得分:1)

根据定义,数据框是矩形的,每行中的列数相同。您可以将每个行的长度设置为相同(它们将使用NA填充),然后rbind将它们组合在一起:

maxlength = max(lengths(paths))
paths2 = lapply(paths, function(x) {length(x) = maxlength; return(x)})
paths_df = do.call(rbind, args = paths2)

这将给出一个矩阵,但您可以从那里轻松转换为数据框。

答案 1 :(得分:0)

data.frame需要是矩形的。此外,给定列的所有元素都必须是相同类型的对象。因此,您可以拥有一个由data.frame类型的对象组成的list列,其大小可能会有所不同。

paths=list(1,c(1,2))
df=data.frame("pathNumber"= 1:length(paths))
df$path=paths

结果如下所示

  pathNumber path
1          1    1
2          2 1, 2

答案 2 :(得分:0)

一种选择是将列表作为数据框的列。如果您想要其他列,可能需要这样做。

df <- data.frame(paths = I(paths))