【问题标题】:Why are my data.frame columns lists?为什么我的 data.frame 列是列表?
【发布时间】:2014-05-27 03:29:20
【问题描述】:

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

我想知道是否可以修改这个表达,以便它产生正常的数据表。

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    我建议这样做

    do.call(rbind,lapply(my.list, function (m)
      data.frame(name = ...,
           tvd = ...)))
    

    而不是尝试将列表列表转换为 data.frame

    【讨论】:

      【解决方案2】:

      您似乎只是想拆除原始数据然后重新组装?如果是这样,这里有一些很酷的东西值得一看。假设 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
      

      【讨论】:

        猜你喜欢
        • 2011-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多