R分组数据框按组取Top N行:函数修改及异常原因排查
问题背景
我有一个结构如下的大型DataFrame:
Rows: 0 Columns: 7 $ transcript <chr> $ group <fct> $ sample_name <fct> $ transcript_biotype <chr> $ description <chr> $ counts_total <int> $ counts_unmod <int>
我的需求是:按sample_name分组,提取每组中指定列(例如counts_total)数值最高的N条transcripts。我自己编写了get_top_genes函数,但它无法正确返回每组预期的行数。
具体问题
- 如何修改
get_top_genes函数,让它能接受三个参数:DataFrame、目标列名、每组返回的行数? - (附加问题)为什么
top_n()、slice_head()和slice_max()没有返回预期输出(每组2行)?
原函数问题说明
原函数错误地按group分组,使用top_n()时每组返回的行数不一致;改用slice_head(n=2)能得到正确结果,但希望行数可以通过参数传入而非硬编码;使用slice_max()也存在每组行数不均的问题。
测试用模拟数据代码
set.seed(0) num_transcripts_per_group <- 100 num_sample_names_per_group <- 3 transcript_shared_percentage <- 0.5 common_transcripts <- paste0("Transcript_", 1:num_transcripts_per_group) unique_transcripts <- list( group1 = lapply(1:num_sample_names_per_group, function(i) { setdiff(common_transcripts, sample(common_transcripts, round(transcript_shared_percentage * num_transcripts_per_group))) }), group2 = lapply(1:num_sample_names_per_group, function(i) { setdiff(common_transcripts, sample(common_transcripts, round(transcript_shared_percentage * num_transcripts_per_group))) }) ) df <- expand.grid( transcript = c(unlist(unique_transcripts$group1), unlist(unique_transcripts$group2)), group = factor(rep(c("group1", "group2"), each = num_sample_names_per_group)), sample_name = factor(rep(paste0("Sample_", 1:num_sample_names_per_group), 2)), transcript_biotype = rep("biotype", 2 * num_sample_names_per_group), description = rep("Transcript description", 2 * num_sample_names_per_group) ) unique_counts_total <- sample(1:1000, num_transcripts_per_group, replace = TRUE) unique_counts_unmod <- sample(5:500, num_transcripts_per_group, replace = TRUE) df$counts_total <- sample(unique_counts_total, nrow(df), replace = TRUE) df$counts_unmod <- sample(unique_counts_unmod, nrow(df), replace = TRUE) rownames(df) <- NULL df <- df %>% mutate(sample_name = ifelse(group == "group2", paste0("sample", 4:6), as.character(sample_name))) print(df)
内容的提问来源于stack exchange,提问作者ramen
相关产品推荐
相关产品推荐

