gpt4 book ai didi

r - 如何有效地在一系列数据帧上创建一个 nrow 表?

转载 作者:行者123 更新时间:2023-12-01 16:41:44 27 4
gpt4 key购买 nike

更新 使用在整个站点中找到的不同解决方案:

我仍然无法使用堆栈和 ldply 函数实现所需的输出:

所需的输出如下所示:

  Dataset              Samples
1 WGS nrow(WGS.ped)
2 WES nrow(WES.ped.exp)
3 MIPS nrow(MIPS.ped.exp)

1) ldply:如何给 V1.id 列分配名称?

ldply(list(WGS=WGS.ped, WES=WES.ped.exp, MIPS=mips.ped.exp), 
function(l)(Samples=nrow(l)))

.id V1
1 WGS 3908
2 WES 26367
3 MIPS 14193

2) ldply: 如何给 V1.id 列命名?

ldply(list(WGS=WGS.ped, WES=WES.ped.exp, MIPS=mips.ped.exp), nrow)

.id V1
1 WGS 3908
2 WES 26367
3 MIPS 14193

3) lapply %>% as.data.frame :将数据框名称作为列返回,而不是作为第一列“Dataset”。

lapply(list(WGS=WGS.ped, WES=WES.ped.exp, MIPS=mips.ped.exp), nrow) %>% 
as.data.frame

WGS WES MIPS
1 3908 26367 14193

4) sapply %>% stack : 如何反转列的顺序?以及如何用stack表示列名?

sapply(list(WGS=WGS.ped, WES=WES.ped.exp, MIPS=mips.ped.exp), nrow) %>% 
stack()

values ind
1 3908 WGS
2 26367 WES
3 14193 MIPS

5) map %>% as.data.frame :将数据框名称作为列返回,而不是作为第一列“Dataset”。

map(list(WGS=WGS.ped, WES=WES.ped.exp, MIPS=mips.ped.exp), nrow) %>% 
as.data.frame()

WGS WES MIPS
3908 26367 14193

我有三个数据帧 WGS.ped, WES.ped,expMIPS.ped.exp

我想创建一个新的数据框来汇总它们的行数/每个数据框中的总行数。

所需的输出如下所示:

Dataset Samples
WGS nrow(WGS.ped)
WES nrow(WES.ped.exp)
MIPS nrow(MIPS.ped.exp)

实现此目标的有效且可重现的方法是什么,最好使用 dplyr?

谢谢!

最佳答案

好吧,这个特别有趣。这是一个修改后的解决方案,只需要 dplyr。它利用了基本函数 mget,在我们将要查找的名称向量传递给 R 环境后,它通过从我们的 R 环境中抓取它们来构建我们的数据帧的命名列表.

接下来,只需在 bind_rows() 中使用 .id 来创建数据框名称的“虚拟”列,这让我们可以整齐地分组和总结。

library(dplyr)

# Load some built-in dataframes to use as an example
df1 <- mtcars
df2 <- iris
df3 <- PlantGrowth

names_list <- c("df1","df2","df3")
summary_df <- mget(names_list, envir = globalenv()) %>%
bind_rows(.id = "Dataset") %>%
group_by(Dataset) %>%
summarise(Samples = n())

# Output
# A tibble: 3 x 2
Dataset Samples
<chr> <int>
1 df1 32
2 df2 150
3 df3 30

关于r - 如何有效地在一系列数据帧上创建一个 nrow 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49960605/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com