r - 在数据表 R 上查找内部值
问题描述
我有一个带有两个标识符和一个值的数据表,如下所示:
dt <- data.table(id=LETTERS[1:8], id_opposite=c("B","A","H","D", "F","C", "E","G"), value = 1:8)
dt
id id_opposite value
1: A B 1
2: B A 2
3: C H 3
4: D D 4
5: E F 5
6: F C 6
7: G E 7
8: H G 8
我想添加一个包含对应于 id_opposite 的值的列。所以对于第一行,这将是 2,对于第二行,它将是 1。即我想要的输出是这样的:
id id_opposite value value_opposite
1 A B 1 2
2 B A 2 1
3 C H 3 8
4 D D 4 4
5 E F 5 6
6 F C 6 3
7 G E 7 5
8 H G 8 7
我知道我可以通过从 dt 构造一个查找表,然后将它与 dt 合并来做到这一点,但是有没有办法在数据表中做,比如
dt[, value_opposite := dt[some-function-of-id_opposite-and-value]]
感谢您有任何建议!
解决方案
对于这种特殊情况:
dt$value_opposite <- match(dt$id_opposite, dt$id)
但是,如果您的值与索引不同,您也可以这样做:
dt$value_opposite <- dt$value[match(dt$id_opposite, dt$id)]
dt
id id_opposite value value_opposite
1: A B 1 2
2: B A 2 1
3: C H 3 8
4: D D 4 4
5: E F 5 6
6: F C 6 3
7: G E 7 5
8: H G 8 7
推荐阅读
- c - 在 C 中读取带有时间标头的系统时间
- sql - 将跨多个分隔字符串的所有值编译到一个表中
- android-studio - ViewPager2 不遵守约束布局
- java - 使用python注入mvn依赖
- php - Laravel Where 子句、分页和 sortByDesc
- python - 如何仅减去 2 个 Pandas 列中的时间(不包括日期)?
- python - python虚拟环境.exe文件使用
- angular - Angular 在 ng-container 中使用父作用域
- sql-server - 存储过程结果在 DEV 服务器上正确显示,但在 STAGING 上不正确
- python - 将 PySpark 管道保存到 PMML 并使用 Flask 部署它(根据请求在应用程序中出现错误)