在R中合并列名不一致的鸟类计数DataFrame并生成两种输出
R语言处理鸟类计数数据的两种解决方案
先模拟你的测试数据(直接替换成你的真实数据即可):
df1 <- data.frame(Especies = c("麻雀", "白头鹎", "喜鹊"), Conteo = c(12, 8, 3)) df2 <- data.frame(Species = c("麻雀", "喜鹊", "乌鸦"), Count = c(9, 5, 6))
首先确保安装并加载dplyr包(处理数据的常用工具包):
# 首次使用先安装 install.packages("dplyr") # 加载包 library(dplyr)
需求一:合并后统计各物种总计数
核心思路:先统一两个数据框的列名,再合并后按物种分组求和
# 重命名df2的列,和df1保持一致 df2_renamed <- df2 %>% rename(Especies = Species, Conteo = Count) # 合并两个数据框,按物种分组计算总计数 total_counts <- bind_rows(df1, df2_renamed) %>% group_by(Especies) %>% summarise(总计数 = sum(Conteo)) # 查看结果 print(total_counts)
运行后会得到每个物种两次计数的总和,不管某个物种只在其中一次出现。
需求二:合并物种并分列显示两次计数(无数据填0)
核心思路:用全连接匹配所有物种,再把缺失值替换为0
# 分别重命名列,明确区分两次计数 df1_renamed <- df1 %>% rename(Species = Especies, 计数_日期1 = Conteo) df2_renamed <- df2 %>% rename(计数_日期2 = Count) # 全连接所有物种,匹配不上的位置会显示NA split_counts <- full_join(df1_renamed, df2_renamed, by = "Species") %>% # 把NA替换成0 mutate(计数_日期1 = ifelse(is.na(计数_日期1), 0, 计数_日期1), 计数_日期2 = ifelse(is.na(计数_日期2), 0, 计数_日期2)) # 查看结果 print(split_counts)
运行后每个物种占一行,两列分别显示两次的计数,没出现过的物种对应列填0。
内容的提问来源于stack exchange,提问作者dz.
相关产品推荐
相关产品推荐

