gpt4 book ai didi

r - 使用存储在变量中的列名连接数据表

转载 作者:行者123 更新时间:2023-12-03 22:16:11 25 4
gpt4 key购买 nike

我有 2 个 data.tables:

library(data.table)
dt1 <- data.table(id = 1:5, value1 = 11:15, value2 = 21:25, value3 = 36:40)
dt2 <- data.table(name = c("value1", "value1", "value1", "value1",
"value2", "value2", "value2", "value3", "value3"),
valueMin = c(10, 13, 14, 18, 21, 24, 25, 36, 38),
valueMax = c(13, 14, 18, 20, 24, 25, 27, 38, 42),
label = c(101:104, 201:203, 301:302))
> dt1
id value1 value2 value3
1: 1 11 21 36
2: 2 12 22 37
3: 3 13 23 38
4: 4 14 24 39
5: 5 15 25 40
> dt2
name valueMin valueMax label
1: value1 10 13 101
2: value1 13 14 102
3: value1 14 18 103
4: value1 18 20 104
5: value2 21 24 201
6: value2 24 25 202
7: value2 25 27 203
8: value3 36 38 301
9: value3 38 42 302

我期望的结果如下:加入来自 dt2 的标签至 dt1事实上, value1dt1介于 dt2 中的 valueMin 和 valueMax 之间和 dt2$name匹配到 value1 )。
这是我的解决方案(给出正确的结果):
varName <- "value1"
dt2_temp <- dt2[name == varName,]
dt1[dt2_temp, on = .(value1 > valueMin, value1 <= valueMax), nomatch = 0] %>%
select(id, label)
id label
1: 1 101
2: 2 101
3: 3 101
4: 4 102
5: 5 103

我想对 label 中的所有其余列( value2value3 )执行相同的操作(获取 dt1 列) (使用循环),因此需要替换对列名 value1 的引用加入存储在 varName 中的名称, 就像是:
dt1[dt2_temp, on = .(varName > valueMin, varName <= valueMax), nomatch = 0]

不幸的是,我没有成功使用:简单地 varName , eval(varName) , as.name(varName) .你知道如何解决这个问题吗?

错误消息类似于:

Error in `[.data.table`(dt1, dt2_temp, on = .(varName > valueMin, varName <= valueMax),  : 
Column(s) [varName,varName] not found in x

最佳答案

为什么不一次完成所有操作,没有循环?

一个可能的解决方案:

melt(dt1, id = 1)[dt2, on = .(variable = name, value > valueMin, value <= valueMax), lbl := i.label
][, dcast(.SD, id ~ variable, value.var = c("value","lbl"))]

这使:

   id value_value1 value_value2 value_value3 lbl_value1 lbl_value2 lbl_value3
1: 1 11 21 36 101 NA NA
2: 2 12 22 37 101 201 301
3: 3 13 23 38 101 201 301
4: 4 14 24 39 102 201 302
5: 5 15 25 40 103 202 302

关于r - 使用存储在变量中的列名连接数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51186683/

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