1
我有两个数据帧:重新编码列
- 查找表
lookup
用完全按命名的列varName
(变量名),key
,和value
- 数据帧
df
与列varName
中的值以及对应于key
的值(df
中的值是lookup
的关键)。该数据帧比查找数据帧大得多(例如1e6行)。
我想通过对于每个变量,其中在df
密钥由从lookup
数据帧对应value
代替追加新列重新编码在df
数据。重要的是要注意,键是双重类型的。
的样本数据:
# Generate sample data
lookup <- data.frame(
varName = rep(LETTERS[1:3], each = 3),
key = runif(9),
value = runif(9)
)
df <- expand.grid(
A = lookup[lookup$varName == 'A', 'key'],
B = lookup[lookup$varName == 'B', 'key'],
C = lookup[lookup$varName == 'C', 'key']
)
我目前的解决方案使用的临时变量重命名和join
从plyr
:
require(plyr)
for (varName in unique(lookup$varName)) {
tmpLookup <- rename(lookup, replace = c(key = varName))
df[paste0(varName, '_value')] <- join(df[varName], tmpLookup[c(varName, 'value')],
by = varName)['value']
}
df
问题:
- 是这样安全吗?我无法找到任何信息,如果加入
double
将始终正确使用join
- 有没有更好的方式来完成同样更安全和更快?
第二行('DT1')失败,错误:'错误setkeyv(X,COLS,冗长=冗长,物理=物理):一些列不在data.table:Var2'中。 –
@TomasGreif我无法使用'data.table_1.9.5'重现错误 – akrun