R语言:如何合并person_list_df后按person_id求和并筛选count>4?
嘿,我来帮你搞定这个R数据处理的需求!针对你提到的合并求和+筛选的问题,我给你两种实现方案,一种用dplyr(代码更直观易读),另一种用基础R(不需要额外安装包)。
首先先确认你的初始数据结构:
person_list_df = list() list1 <- data.frame("person_id" = 21:25, "count" = 2:6) list2 <- data.frame("person_id" = 24:28, "count" = 3:7) person_list_df <- list(list1, list2)
方案一:使用dplyr包(推荐)
如果还没安装dplyr,先运行install.packages("dplyr")安装。然后执行以下代码:
library(dplyr) # 第一步:合并所有数据框,按person_id分组对count求和 summed_data <- bind_rows(person_list_df) %>% group_by(person_id) %>% summarize(total_count = sum(count, na.rm = TRUE)) %>% ungroup() # 第二步:筛选出总和大于4的记录 filtered_data <- summed_data %>% filter(total_count > 4) # 第三步:存入casesANDcontrols_df的第一个元素 casesANDcontrols_df <- list() casesANDcontrols_df[[1]] <- filtered_data
运行后查看结果:
print(casesANDcontrols_df[[1]])
会得到你想要的输出:
# A tibble: 5 × 2 person_id total_count <int> <int> 1 24 8 2 25 10 3 26 5 4 27 6 5 28 7
方案二:使用基础R(无需额外包)
如果你不想加载第三方包,用基础R也能实现:
# 第一步:合并列表中的所有数据框 combined_data <- do.call(rbind, person_list_df) # 第二步:按person_id分组求和count summed_data <- aggregate(count ~ person_id, data = combined_data, FUN = sum) # 第三步:筛选count总和大于4的记录 filtered_data <- summed_data[summed_data$count > 4, ] # 第四步:存入目标列表 casesANDcontrols_df <- list() casesANDcontrols_df[[1]] <- filtered_data
这个方案的输出和上面完全一致,只是用了基础R的函数来实现。
两种方案都能完美满足你的两个需求:合并后按person_id求和,再筛选出总和大于4的记录,并且把结果存入casesANDcontrols_df[[1]]中。
内容的提问来源于stack exchange,提问作者The Great
相关产品推荐
相关产品推荐

