r - 将合并的列的列名更改为指定数据集中的名称
问题描述
如果我有以下data.tables:
编辑:更改c
为dt1
以d
防止dt1[dt2, on=.(col1= adapted_col1 )]
成为问题的解决方案。
library(data.table)
dt1 <- data.table(col1 = c("a", "b", "d"),
col2 = 1:3,
col3 = c(TRUE, FALSE, FALSE))
set.seed(1)
dt2 <- data.table(adapted_col1 = sample(c("a", "b", "c"), size = 10, replace = TRUE),
another_col = sample(1:10, size = 10, replace = TRUE),
and_anouther = sample(c(TRUE, FALSE), size = 10, replace = TRUE))
我将它们合并如下:
dt2[dt1, on=.(adapted_col1 = col1)]
adapted_col1 another_col and_anouther col2 col3
1: a 3 FALSE 1 TRUE
2: a 8 TRUE 1 TRUE
3: a 8 TRUE 1 TRUE
4: b 2 TRUE 2 FALSE
5: b 7 FALSE 2 FALSE
6: b 10 TRUE 2 FALSE
7: b 4 FALSE 2 FALSE
8: c 4 TRUE 3 FALSE
9: c 5 TRUE 3 FALSE
10: c 8 TRUE 3 FALSE
该列在 中获取列名的名称dt2
。但是,由于我将与 重复进行此合并dt1
,因此我需要新的 data.table 具有来自 的列名dt1
。我可以改变这个吗?
我发现的唯一解决方案是这篇使用不同包的帖子,但我宁愿只使用 data.table。
解决方案
澄清后,我建议为此编写自己的函数:
correct_name_join <- function(dt1, dt2, ...){
dots <- vapply(substitute(...()), deparse, NA_character_)
dt <- dt1[dt2, on = dots]
setnames(dt, old = names(dots), new = as.character(dots))
return(dt)
}
correct_name_join(dt2, dt1, adapted_col1 = col1)
col1 another_col and_anouther col2 col3
1: a 3 TRUE 1 TRUE
2: a 5 TRUE 1 TRUE
3: a 10 TRUE 1 TRUE
4: b 5 FALSE 2 FALSE
5: b 7 FALSE 2 FALSE
6: b 9 FALSE 2 FALSE
7: d NA NA 3 FALSE
dt2[dt1, on=.(adapted_col1 = col1)]
adapted_col1 another_col and_anouther col2 col3
1: a 3 TRUE 1 TRUE
2: a 5 TRUE 1 TRUE
3: a 10 TRUE 1 TRUE
4: b 5 FALSE 2 FALSE
5: b 7 FALSE 2 FALSE
6: b 9 FALSE 2 FALSE
7: d NA NA 3 FALSE
推荐阅读
- python - 如何使 Python 的 ast 模块在烧瓶中工作?
- c++ - 关于异常成长
- javascript - Javascript忽略更改
- java - Android:Firebase登录失败密码无效或用户没有密码
- javascript - 谷歌地图 API:搜索最近的火车站?
- c++ - 如何在 Visual Studio 2017 中创建 Visual c++ MFC 控制台项目
- python - 如何从加速度计和陀螺仪计算速度?
- c# - 以最快的方式替换文件中的特殊字符?
- java - 检查程序是否空闲或在 Java 中运行了一段时间
- javascript - Angular - 自定义元素不适用于 Firefox & Microsoft Edge & Internet Explorer