基于R语言匹配相同siteid并计算数据集列差值的实现需求
在R中计算两个数据集匹配行的列差值
给定两个数据集:
df_100 <- data.frame(siteid = seq(1,5,1), conflu = c(3,2,4,5,6), diflu = c(9,2,30,2,5)) df_full <- data.frame(siteid = seq(1,10,2), conflu = c(6,3,5,2,3), diflu = c(5,9,2,30,7))
需要找出siteid相同的行,计算conflu和diflu列的差值(按示例为df_full列值减去df_100列值),并生成包含siteid和差值列的新数据集df_difference。
方法1:使用dplyr(简洁直观)
借助dplyr包的连接与转换函数,快速实现需求:
library(dplyr) # 匹配共同siteid并按示例方向计算差值 df_difference <- df_100 %>% inner_join(df_full, by = "siteid", suffix = c("_100", "_full")) %>% mutate( diff_con = conflu_full - conflu_100, diff_dif = diflu_full - diflu_100 ) %>% select(siteid, diff_con, diff_dif) # 输出结果 df_difference
运行后得到与示例一致的结果:
siteid diff_con diff_dif 1 1 3 -4 2 3 1 -18 3 5 -3 2
方法2:使用Base R(无需额外包)
如果不想加载第三方包,用基础R函数也能完成:
# 提取共同的siteid common_ids <- intersect(df_100$siteid, df_full$siteid) # 筛选匹配行并按siteid排序,保证顺序一致 df100_match <- df_100[df_100$siteid %in% common_ids, ] df100_match <- df100_match[order(df100_match$siteid), ] df_full_match <- df_full[df_full$siteid %in% common_ids, ] df_full_match <- df_full_match[order(df_full_match$siteid), ] # 生成差值数据集 df_difference <- data.frame( siteid = common_ids, diff_con = df_full_match$conflu - df100_match$conflu, diff_dif = df_full_match$diflu - df100_match$diflu ) # 输出结果 df_difference
同样会得到符合要求的输出。
内容的提问来源于stack exchange,提问作者vermicellion
相关产品推荐
相关产品推荐

