【问题标题】:How to efficiently replace one set of values with another set of values in data.table using a lookup table?如何使用查找表有效地将一组值替换为 data.table 中的另一组值?
【发布时间】:2021-05-20 02:02:36
【问题描述】:

我需要合并两个数据集,其中相同的观察结果名称不同。为此,在合并这些集合之前,我需要根据查找日期对其中一个进行观察。用 data.table 的说法我该怎么做?

下面的例子,显然行不通:

# dataset:
dt <- data.table( chapter=as.character(11:15) );dt

# lookup table:
dtLookup <- data.table(
  old = c("11", "12", "14", "15"),
  new = c("101", "102", "105", "104")
)

# updated data.table with values replaced according to lookup table:

# I can do it this way, but it's obviously very slow not taking the data.table advantage

for(i in 1:nrow(dtLookup) ) {
 dt[chapter == dtLookup$old[i], chapter:= dtLookup$new[i]]
};

【问题讨论】:

  • 您希望输出什么?

标签: r data.table


【解决方案1】:

在另一个data.table 中组合旧值和新值并进行“查找分配”。

replacements <- data.table(
  old = c("12", "11", "14", "15"),
  new = c("11", "12", "15", "16")
)

dt[
  replacements,
  on = c(chapter = "old"),
  chapter := new
]

dt
#    chapter
# 1:      12
# 2:      11
# 3:      13
# 4:      15
# 5:      16

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    相关资源
    最近更新 更多