为什么我的data.frame列列出?

时间:2014-05-27 03:29:20

标签: r dataframe

我有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 = ...))))

我想知道是否有可能修改这种表达方式,以便产生正常的数据表。

2 个答案:

答案 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