gpt4 book ai didi

r - 在 R 中使用条件进行内部连接

转载 作者:行者123 更新时间:2023-12-01 23:03:55 26 4
gpt4 key购买 nike

我想做内部连接,条件是它应该给我减去 2 列。

df1 = data.frame(Term = c("T1","T2","T3"), Sec = c("s1","s2","s3"), Value =c(10,30,30))

df2 = data.frame(Term = c("T1","T2","T3"), Sec = c("s1","s3","s2"), Value =c(40,20,10)

df1
Term Sec Value
T1 s1 10
T2 s2 30
T3 s3 30

df2
Term Sec Value
T1 s1 40
T2 s3 20
T3 s2 10

我想要的结果是
  Term  Sec Value
T1 s1 30
T2 s2 20
T3 s3 10

基本上我加入了两个表和我正在采取的列值
Value=  abs(df1$Value - df2$Value)

我一直在努力,但找不到任何方法在基础 R 中进行这种有条件的合并。可能如果基础 R 不可能,dplyr 应该能够使用 inner_join() 做到这一点,但我对这个包的大部分内容都不太了解。

因此,任何关于 R 和/或 dplyr 的建议将不胜感激

编辑

我已经按照要求包含了我的原始数据。我的数据在这里

https://jsfiddle.net/6z6smk80/1/

DF1 是第一张 table ,DF2 是第二张 table 。 DF2 从第 168 行开始。

所有逻辑都一样,我想加入这两个长度为 160 行的表。我想通过 ID 加入并从两个表中获取列值的差异。结果数据集应具有相同的行数,即 160 行,具有额外的列差异

最佳答案

使用 data.table s binary join 您可以在加入时修改列。 nomatch = 0L确保您正在进行内部联接

library(data.table)
setkey(setDT(df2), Sec)
setkey(setDT(df1), Sec)[df2, .(Term, Sec, Value = abs(Value - i.Value)), nomatch = 0L]
# Term Sec Value
# 1: T1 s1 30
# 2: T2 s2 20
# 3: T3 s3 10

关于r - 在 R 中使用条件进行内部连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31179805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com