R语言如何将data.frame拆分为含唯一type对的小data.frame列表并排除单行type
你可以用以下代码实现需求,支持任意分组变量、自动过滤行数不足2的分组并输出警告:
tidyverse 实现(代码简洁易读)
library(dplyr) library(purrr) # 统计各type对应行数,筛选无效分组 type_stat <- data %>% count(type) invalid_group <- type_stat$type[type_stat$n < 2] # 输出警告 if (length(invalid_group) > 0) { walk(invalid_group, ~ warning(paste0("type ", .x, " has just one row thus is excluded."))) } # 过滤有效数据,生成所有两两type组合,拼接对应数据 valid_df <- data %>% filter(!type %in% invalid_group) type_combs <- combn(unique(valid_df$type), 2, simplify = F) desired_output <- map(type_combs, ~ filter(valid_df, type %in% .x))
base R 实现(无需加载第三方包)
# 统计各type对应行数,筛选无效分组 type_cnt <- table(data$type) invalid_group <- names(type_cnt)[type_cnt < 2] # 输出警告 if (length(invalid_group) > 0) { for (t in invalid_group) { warning(sprintf("type %s has just one row thus is excluded.", t)) } } # 过滤有效数据,生成所有两两type组合,拼接对应数据 valid_df <- data[!data$type %in% invalid_group, ] type_combs <- combn(unique(valid_df$type), 2, simplify = F) desired_output <- lapply(type_combs, function(pair) valid_df[valid_df$type %in% pair, ])
运行上述代码得到的desired_output和你给出的示例完全匹配,后续如果需要替换为其他分组变量,只要把代码中所有的type替换为对应变量名即可。
内容的提问来源于stack exchange,提问作者Simon Harmel
相关产品推荐
相关产品推荐

