将列表转换为数据框

时间:2019-06-11 07:21:18

标签: r

我正在尝试将列表转换为具有两列的数据框。

该列表来自下一个代码

test <- sapply(data_frame_1, table)

data_frame_1的每一列都有70行,其中包含两个值“ 1”和“ 2”,因此我计算了每一列中每个值的时间,上面的代码给了我这样的输出:

test["1_hypothetical_protein.faa"]
$`1_hypothetical_protein.faa`

 1  2 
69  1 

我想要一个具有两列“ 1”和“ 2”的数据框,如下所示:

                               1 2 
1_hypothetical_protein.faa     1 69

我尝试了下一个选项

do.call("rbind", lapply(test, as.data.frame))

它产生


                                 Var1 Freq
1_hypothetical_protein.faa.1        1   69
1_hypothetical_protein.faa.2        2    1

我也尝试过

new_df <- data.frame(t(data.frame(test)))

2 个答案:

答案 0 :(得分:0)

您可以这样做,而不必在绑定之前将其强制转换为数据框,即

l1 <- list(iris, iris)

do.call(rbind, lapply(l1, function(i) table(i$Species)))
#     setosa versicolor virginica
#[1,]     50         50        50
#[2,]     50         50        50

答案 1 :(得分:0)

这是我在tidyverse中要做的事情:

library(dplyr)
library(tidyr)

dat <- list(iris, iris)
names(dat) <- c("iris_first", "iris_second")

lapply(dat, function(x) x %>%
         group_by(Species) %>%
         summarise(count = n())) %>%
  bind_rows(.id = "id") %>%
  spread(Species, count)

# A tibble: 2 x 4
  id          setosa versicolor virginica
  <chr>        <int>      <int>     <int>
1 iris_first      50         50        50
2 iris_second     50         50        50