我有data.frame
'data.frame': 4 obs. of 2 variables:
$ name:List of 4
..$ : chr "a"
..$ : chr "b"
..$ : chr "c"
..$ : chr "d"
$ tvd :List of 4
..$ : num 0.149
..$ : num 0.188
..$ : num 0.161
..$ : num 0.187
structure(list(name = list("a", "b", "c",
"d"), tvd = list(0.148831029536996, 0.187699857380692,
0.161428147003292, 0.18652668961466)), .Names = c("name",
"tvd"), row.names = c(NA, -4L), class = "data.frame")
似乎as.data.frame(lapply(z,unlist))
将其转换为通常的
'data.frame': 4 obs. of 2 variables:
$ name: Factor w/ 4 levels "a",..: 4 1 2 3
$ tvd : num 0.149 0.188 0.161 0.187
但是,我想知道我能不能做得更好。 我创建了这样丑陋的数据框:
as.data.frame(do.call(rbind,lapply(my.list, function (m)
list(name = ...,
tvd = ...))))
我想知道是否有可能修改这种表达方式,以便产生正常的数据表。
答案 0 :(得分:1)
我建议做
do.call(rbind,lapply(my.list, function (m)
data.frame(name = ...,
tvd = ...)))
而不是尝试将列表列表转换为data.frame
答案 1 :(得分:1)
您似乎只是想要拆除原始数据然后重新组装它?如果是这样,这里有一些很酷的事情要看。假设df
是您的数据。
data.frame
只是一个伪装的清单。要查看此信息,请在数据中比较df[[1]]
到df$name
。 [[
用于列表索引,以及$
。因此,当我们在数据框上使用df$name
时,我们实际上正在查看列表项。
> is.data.frame(df) # df is a data frame
# [1] TRUE
> is.list(df) # and it's also a list
# [1] TRUE
> x <- as.list(df) # as.list() can be more useful than unlist() sometimes
# take a look at x here, it's a bit long
> (y <- do.call(cbind, x)) # reassemble to matrix form
# name tvd
# [1,] "a" 0.148831
# [2,] "b" 0.1876999
# [3,] "c" 0.1614281
# [4,] "d" 0.1865267
> as.data.frame(y) # back to df
# name tvd
# 1 a 0.148831
# 2 b 0.1876999
# 3 c 0.1614281
# 4 d 0.1865267