R语言一行无循环代码统计数据框多列字母出现频率
这行无循环的R代码(基于Base R,无需额外加载包)就能直接生成你要的碱基计数结果,自动忽略NA值:
data.frame(base = c("A", "C", "G", "T"), t(sapply(dfnew, function(col) table(factor(col, levels = c("A", "C", "G", "T")), useNA = "no"))))
如果平时习惯用tidyverse工具链,也可以用这一行代码:
library(tidyverse) dfnew %>% pivot_longer(everything()) %>% drop_na(value) %>% count(name, value) %>% pivot_wider(names_from = name, values_from = n, values_fill = 0) %>% rename(base = value) %>% select(base, C1:C6)
简单解释下逻辑:
- Base R版本:通过
sapply遍历每一列,把列内元素转为指定水平的因子(保证A/C/G/T四个类别都被统计),用table计数时排除NA,最后转置结果并和碱基名称组合成数据框。 - Tidyverse版本:先将宽格式数据转为长格式,过滤掉NA,按列名和碱基分组统计数量,再转回宽格式并填充缺失的计数为0,最后调整列名和顺序得到目标格式。
内容的提问来源于stack exchange,提问作者Tanmay
相关产品推荐
相关产品推荐

