R数据框分组计算物种出现频率与阳性样本绝对数量
R实现数据框转换的完整代码
整体思路:先将非标准结构的宽表转换为整洁长表,提取分组信息后按组统计目标指标即可。
首先加载依赖包:
library(dplyr) library(tidyr)
处理过程代码:
# 1. 数据结构转换:提取行名、转长表后拆分分组信息与物种丰度 df_tidy <- df %>% rownames_to_column("type") %>% pivot_longer(cols = -type, names_to = "sample", values_to = "value") %>% pivot_wider(names_from = type, values_from = value) %>% # 转换物种计数列为数值型(原数据因含分组字符串被存为字符格式) mutate(across(starts_with("Species"), as.numeric)) # 2. 按组计算各物种的出现频率与绝对数量 result <- df_tidy %>% group_by(Group) %>% summarise( # 统计每组总样本数 group_sample_n = n(), # 对每个物种分别计算绝对出现数和频率 across(starts_with("Species"), list( Absolute = ~sum(.x > 0), Freq = ~sum(.x > 0)/n() )) ) %>% # 转换为要求的输出结构 pivot_longer(cols = -c(Group, group_sample_n), names_to = c("Species", ".value"), names_sep = "_") %>% # 调整列顺序与命名匹配需求 select(Species, Group, Freq, Absolute) %>% ungroup()
运行后打印result即可得到你需要的输出格式。
内容的提问来源于stack exchange,提问作者user2300940
相关产品推荐
相关产品推荐

