将列表列表转换为强制数据帧

时间:2017-01-11 16:29:19

标签: r list dataframe

这里列出的列表x如下:

    list1 <- list(NULL, as.integer(0))
    list2 <- list(NULL, as.integer(1))
    list3 <- list(1:5, 0:4)
    x <- list(a=list1, b=list2, c=list3)

x具有以下结构:

    str(x)
     List of 3
     $ a:List of 2
      ..$ : NULL
      ..$ : int 0
     $ b:List of 2
      ..$ : NULL
      ..$ : int 1
     $ c:List of 2
      ..$ : int [1:5] 1 2 3 4 5
      ..$ : int [1:5] 0 1 2 3 4

我正在尝试将其转换为强制数据帧。我第一次使用

   xc <- data.frame(lapply(x, as.numeric)

我收到以下错误

   Error in lapply(x, as.numeric) : 
     (list) object cannot be coerced to type 'double

实际上它只能用as.character作为参数。

我的目标是使用以下结构访问数据框:

   str(xc)

   'data.frame':    2 obs. of  3 variables:
    $ a: int  NA 0 ...
    $ b: int  NA 1 ...
    $ c: int [1:5] 1 2 3 4 5 int [1:5] 0 1 2 3 4

1 个答案:

答案 0 :(得分:0)

我认为结果数据框的列必须是列表(这是可以处理多个向量和NULL值的类型)。

使用dplyr或data.table包可能是最简单的方法。 然后,您可以使用as.data.frame将其转换回基础data.frame:

library(data.table)
xc <- as.data.table(x)

library(dplyr)
xc <- as_data_frame(x)

转换为基础data.frame后,结果是相同的:

as.data.frame(xc)

#>      a    b             c
#> 1 NULL NULL 1, 2, 3, 4, 5
#> 2    0    1 0, 1, 2, 3, 4

列是列表:

str(as.data.frame(xc))

#> 'data.frame':    2 obs. of  3 variables:
#>  $ a:List of 2
#>   ..$ : NULL
#>   ..$ : int 0
#>  $ b:List of 2
#>   ..$ : NULL
#>   ..$ : int 1
#>  $ c:List of 2
#>   ..$ : int  1 2 3 4 5
#>   ..$ : int  0 1 2 3 4