如何高效生成多数据框行数统计表格?及ldply列名修改问题
高效创建多数据框行数统计表格的解决方案
我懂你现在的困扰——试了好几种方法,用stack和ldply都没得到想要的行数统计表格对吧?尤其是ldply生成的列名总是不是你想要的Dataset和Samples,下面给你针对性解决这个问题,还附带更顺手的替代方案:
1. 给ldply的结果指定自定义列名
你之前的代码返回.id和V1列,是因为没利用好ldply的.id参数,也没让函数返回带列名的结构。只要改两处就行:
- 用
.id参数直接把分组列命名为Dataset - 让匿名函数返回一个带
Samples列名的数据框,而不是单纯的数值向量
修改后的代码如下:
library(plyr) # 生成符合预期的表格 row_count_table <- ldply( list(WGS = WGS.ped, WES = WES.ped.exp, MIPS = mips.ped.exp), function(df) data.frame(Samples = nrow(df)), .id = "Dataset" )
运行后你就会得到两列:Dataset对应数据框名称,Samples对应各自的行数,完全匹配你的预期格式。
如果觉得上面的写法有点繁琐,也可以先运行原代码,再手动重命名列:
# 先获取结果 temp_result <- ldply( list(WGS = WGS.ped, WES = WES.ped.exp, MIPS = mips.ped.exp), function(l) nrow(l) ) # 重命名列 colnames(temp_result) <- c("Dataset", "Samples")
2. 更现代的替代方案(推荐)
如果你不局限于plyr,用tidyverse系列的工具会更直观简洁,比如结合purrr和tibble:
library(tibble) library(purrr) # 先把数据框放进命名列表 data_list <- list(WGS = WGS.ped, WES = WES.ped.exp, MIPS = mips.ped.exp) # 遍历列表生成表格 row_count_table <- imap_dfr(data_list, ~ tibble( Dataset = .y, # .y对应列表的名称 Samples = nrow(.x) # .x对应列表里的每个数据框 ))
这种写法逻辑更清晰,也不容易出现列名混乱的问题。
内容的提问来源于stack exchange,提问作者Carmen Sandoval
相关产品推荐
相关产品推荐

