R语言如何统计氨基酸序列重复次数并定位对应原始变量
解决方案
你可以在现有代码的基础上,通过遍历匹配每个序列对应的来源列名实现需求,以下提供两种常用实现方式:
方法1:基础R实现(可复用你已经计算好的freq结果)
在你现有代码的末尾添加以下代码即可:
# 先统一列名,匹配你示例的输出格式 colnames(freq) <- c("Clones", "Freq") clones_df <- as.data.frame(clones, stringsAsFactors = FALSE) # 为每个序列匹配来源变量 freq$Variable <- sapply(freq$Clones, function(seq) { # 筛选出包含当前序列的变量名,自动跳过补位的NA值 source_vars <- names(clones_df)[sapply(clones_df, function(col) seq %in% col[!is.na(col)])] paste(source_vars, collapse = ",") }) # 查看最终结果 freq
方法2:tidyverse实现(语法更直观,一步出结果)
如果你习惯使用tidyverse系列包,可以用长表转换的方式直接生成目标结果:
library(tidyverse) # 将宽表转为长表,剔除补位NA后分组统计 result <- as.data.frame(clones, stringsAsFactors = FALSE) %>% pivot_longer(cols = everything(), names_to = "Variable", values_to = "Clones") %>% drop_na(Clones) %>% group_by(Clones) %>% summarise( Freq = n(), Variable = paste(unique(Variable), collapse = ",") ) # 查看最终结果 result
两种方法输出的结果都完全匹配你期望的格式。
内容的提问来源于stack exchange,提问作者Carly Graham
相关产品推荐
相关产品推荐

