首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何有效地在一系列数据帧上创建nrow表?

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

Stack Overflow用户
提问于 2018-04-21 22:04:39
回答 2查看 160关注 0票数 2

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

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

所需的输出如下所示:

代码语言:javascript
复制
  Dataset              Samples
1     WGS        nrow(WGS.ped)
2     WES    nrow(WES.ped.exp)
3    MIPS   nrow(MIPS.ped.exp)

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

代码语言:javascript
复制
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分配名称

代码语言:javascript
复制
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‘返回。

代码语言:javascript
复制
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指示列名

代码语言:javascript
复制
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‘返回。

代码语言:javascript
复制
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

我想要创建一个新的数据框架,它总结了它们的行数/每个数据帧中的行总数。

所需的输出如下所示:

代码语言:javascript
复制
Dataset Samples
WGS     nrow(WGS.ped)
WES     nrow(WES.ped.exp)
MIPS    nrow(MIPS.ped.exp)

什么是实现这一目标的有效和可重复的方法,最好是使用dplyr?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-21 22:36:29

好吧,这特别有趣。下面是一个只需要dplyr的修改后的解决方案。它利用了基函数mget,它在传递给我们要查找的名称向量之后,从我们的R环境中获取数据的命名列表。

在此之后,只需在.id中使用bind_rows()来创建dataframe名称的“虚拟”列,这样我们就可以灵活地分组和总结。

代码语言:javascript
复制
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
票数 6
EN

Stack Overflow用户

发布于 2018-04-22 01:17:00

下面是一个基本的r函数,它将总结传递给它的数据框架:

代码语言:javascript
复制
summarize_data <- function(...) {

  data <- list(...)

  call <- as.character(match.call())

  names <- gsub(".*\\((.*)\\).*", "\\1", call)[-1]


  data.frame(names = names,
             rows = sapply(data, nrow),
             stringsAsFactors = FALSE)

}

这会得到:

代码语言:javascript
复制
> summarize_data(mtcars, iris)


   names rows
1 mtcars   32
2   iris  150
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49960605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档