我有两张DT

X = data.table(names = c("a", "a", "b", "b", "c", "c"), years = c("2001", "2002", "2001", "2002", "2001", "2002"), val.1 = 1:6, key = c("names", "years"))

X

| names | years | val.1 |
| -------- | -------- |
| a   | 2001   |  1 |
| a   | 2002   |  2 |
| b   | 2001   |  3 |
| b   | 2002   |  4 |
| c   | 2001   |  5 |
| c   | 2002   |  6 |

X.update = data.table(names = c("a", "b", "b", "c", "d", "d", "d"), years = c("2003", "2002", "2003", "2003", "2001", "2002", "2003"), val.1 = 11:17, key = c("names", "years"))

X.update

| names | years | val.1 |
| -------- | -------- |
| a   | 2003   |  11 |
| b   | 2002   |  12 |
| b   | 2003   |  13 |
| c   | 2003   |  14 |
| d   | 2001   |  15 |
| d   | 2002   |  16 |
| d   | 2003   |  17 |

The task looks natural to me. X.update supersedes all old values (val.1) for the same c("names", "year") 和 adds new entries everywhere else.

这里的意思是:

  1. 2003年所有名称的新行
  2. 每年都有一个新的d行(基本上是添加了d)
  3. B在2002年的修正

X.Final X.Final

| names | year | val.1 |
| -------- | -------- |
| a   | 2001   |  1 |
| a   | 2002   |  2 |
| a   | 2003   |  11 |       <-added for a for 2003
| b   | 2001   |  3 |        # edited, R2Evans 和 Sam are right
| b   | 2002   |  12 |       <-corrected for b for 2002
| b   | 2003   |  13 |       <-added for b for 2003
| c   | 2001   |  5 |
| c   | 2002   |  6 |
| c   | 2003   |  14 |       <-added for c for 2003
| d   | 2001   |  15 |       <-added
| d   | 2002   |  16 |       <-added
| d   | 2003   |  17 |       <-added

因为我需要对有100,000行的表使用它,所以我想在DT中寻求一个惯用的(=FAST)解决方案.

推荐答案

如果从X中删除X.update中存在的内容,然后进行行绑定,这将是相当直接的.

(仅供参考,我认为你的第4排应该是val.1 = 3,而不是4.)

out <- rbind(X[!X.update,], X.update)
setkeyv(out, key(X))
out
# Key: <names, years>
#      names  years val.1
#     <char> <char> <int>
#  1:      a   2001     1
#  2:      a   2002     2
#  3:      a   2003    11
#  4:      b   2001     3
#  5:      b   2002    12
#  6:      b   2003    13
#  7:      c   2001     5
#  8:      c   2002     6
#  9:      c   2003    14
# 10:      d   2001    15
# 11:      d   2002    16
# 12:      d   2003    17

X[!X.update,]是反连接,在第一帧的关键点上操作.

R相关问答推荐

ggplot 2中的地块底图(basemaps_gglayer()不起作用)

更改Heatmap Annotation对象的名称

R:连接值,而不是变量?

R中的子集文件—读取文件名索引为4位数字序列,例如0001到4000,而不是1到4000)

将非重复序列高效转换为长格式

在R中,如何在每个堆叠的条上放置误差条,特别是当使用facet_grid时?

lightgbm发动机在tidymmodels中的L1正则化""

如何在R中合并两个基准点?

提取具有连续零值的行,如果它们前面有R中的有效值

解析R函数中的变量时出现的问题

将项粘贴到向量中,并将它们分组为x的倍数,用空格分隔

来自程序包AFEX和amp;的类/函数和NICE_TABLE&冲突

如何在反曲线图中更改X标签

仅当后续值与特定值匹配时,才在列中回填Nas

如何使投篮在R中保持一致

打印的.txt文件,将值显示为&Quot;Num&Quot;而不是值

使用卡环从R中的列中删除单位(&C)

如何根据每个子框架中分类因子的唯一计数来过滤子框架列表?

如何修改Rust中的R字符串并将其赋给新的R变量,并使用extendr保留原始R字符串

如何从矩阵绘制环弦图