f1", "f2<>f2")] # Found more tha-6ren">
gpt4 book ai didi

r - 如何从表 A 中选择其 ID 与表 B 中的行相匹配但其(非 ID)值不同的行?

转载 作者:行者123 更新时间:2023-12-05 09:02:35 24 4
gpt4 key购买 nike

考虑这两个 data.tables,foobar

foo <- data.table(id = c(1,2,3,4), f1 = c("a", "b", "c", "d"), f2 = c("a", "b", "c", "d"))
bar <- data.table(id = c(1,2,3,4), f1 = c("a", "a", "c", "d"), f2 = c("a", "b", "c", "e"))

foo
id f1 f2
1: 1 a a
2: 2 b b
3: 3 c c
4: 4 d d

bar
id f1 f2
1: 1 a a
2: 2 a b
3: 3 c c
4: 4 d e

我知道 foobar 是一对一的关系。

我想从 bar 中选择行,以便 foo 中的相应行具有不同的值。例如,

  • id 1:f1f2的值在foo和bar中是相同的,所以排除这个
  • id 2:f1 的值已经改变了!将其包含在结果中
  • id 3:f1f2的值在foo和bar中是相同的,所以排除这个
  • id 4:f2 的值已经改变!将其包含在结果中

预期结果

bar[c(2,4)]
id f1 f2
1: 2 a b
2: 4 d e

我尝试了什么

我认为非相等连接在这里会很好用。不幸的是,似乎不支持“不等于”运算符。?

foo[!bar, on = c("id=id", "f1!=f1", "f2!=f2")]
# Invalid operators !=,!=. Only allowed operators are ==<=<>=>.

foo[!bar, on = c("id=id", "f1<>f1", "f2<>f2")]
# Found more than one operator in one 'on' statement: f1<>f1. Please specify a single operator.

最佳答案

使用data.table:

bar[foo,.SD[i.f1!=x.f1|i.f2!=x.f2],on="id"]

id f1 f2
<num> <char> <char>
1: 2 a b
2: 4 d e

关于r - 如何从表 A 中选择其 ID 与表 B 中的行相匹配但其(非 ID)值不同的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71225879/

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