这里列出的列表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
答案 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