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

考虑这两个 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

https://stackoverflow.com/questions/71225879/

相关文章:

c++ - 指针类型运算符 VS const bool 运算符优先级

reactjs - react 路线不工作 | react 路由器

python - 如何修复 python `dlib` 错误 : "symbol not found

c++ - 将字符数组 char u[10] 与字符串文字 "abc"进行比较是否是未定义的行为

php - 如何使用 htaccess 将 URL 中的下划线替换为破折号?

apache-kafka - Spring kafka消费者@retryabletopic无限重试

c++ - std::vector 和动态分配数组有什么区别?

google-cloud-platform - (Terraform) 左操作数 : a numbe

reactjs - Next Redux Wrapper 中的水合物作用是什么?

javascript - 如何将 DynamoDB JSON 转换为常规 Javascript 对象