You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 04:29:53