我正在尝试将列表转换为具有两列的数据框。
该列表来自下一个代码
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)))
答案 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