如果两个不同数据集中的列 ID 匹配,则创建一个具有其他列差异的新数据集 r

if match between column ID in two different datasets, then create a new dataset with the difference of other columns r

提问人:vermicellion 提问时间:6/3/2023 更新时间:6/3/2023 访问量:25

问:

我有两个使用 r 的数据集:

df_100= data.frame(siteid=c(seq(1,5,1),conflu=c(3,2,4,5,6),diflu=c(9,2,30,2,5))
df_full= data.frame(siteid=c(seq(1,10,2),conflu=c(6,3,5,2,3),diflu=c(5,9,2,30,7))

如果 siteid 在 df_100 和 df_full 之间相同,我想取每个数据框的 conflu 列之间的差异和 diflu 列的差异。我还希望将该输出放入新的数据帧中,其中保留 siteid,并且列之间的差异创建一个新列。例如:

df_difference=data.frame(siteid=c(1,3,5), diff_con=c(3,1,-3), diff_dif=c(-4,-18,2))
r if 语句 匹配

评论

0赞 joshbrows 6/3/2023
在定义 和 时,您似乎有一个额外的 .它应该是这样的c()df_100df_fulldf_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))

答:

1赞 Marcus 6/3/2023 #1

我不会按照计算来获得您拥有的示例输出,而是根据您的描述:

library(dplyr)

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))

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)

inner_join将匹配并仅保留具有相同“siteid”的行。然后用于执行所需的计算和列。mutateselect