在 R 中覆盖 data.table 中的信息
overwrite information in data.table in R
我有一个 data.table :
data.table(id = c(rep(1,5)),
year = c(rep(2015,3), rep(2016,2)),
class = c(rep("A", 3), rep("B", 2)),
origin = c("Europe", "Asia", "Africa", "Europe", "Asia"),
count = c(30299, 3, 34, 2, 800))
id year class origin count
1: 1 2015 A Europe 30299
2: 1 2015 A Asia 3
3: 1 2015 A Africa 34
4: 1 2016 B Europe 2
5: 1 2016 B Asia 800
但有些信息不正确。我想用另一个 data.table:
覆盖该区域
data.table(id = c(1),
year = c(2015,2016),
class = c("A", "B"),
origin = c("Europe", "Asia"))
id year class origin
1: 1 2015 A Europe
2: 1 2016 B Asia
这样原来的table就变成了:
id year class origin count
1: 1 2015 A Europe 30299
2: 1 2015 A Europe 3
3: 1 2015 A Europe 34
4: 1 2016 B Asia 2
5: 1 2016 B Asia 800
我尝试用 merge
和 within
来做这件事,但我遇到了错误。
我将您的第一个 data.table 命名为 dt_A
,第二个命名为 dt_B
并假设您通过 id
、year
和 class
.
dt_A[dt_B, on = c("id", "year", "class"), origin := i.origin]
returns
id year class origin count
1: 1 2015 A Europe 30299
2: 1 2015 A Europe 3
3: 1 2015 A Europe 34
4: 1 2016 B Asia 2
5: 1 2016 B Asia 800
基本上我们进行了左连接以获取所需的数据并更新了 origin
列。
我有一个 data.table :
data.table(id = c(rep(1,5)),
year = c(rep(2015,3), rep(2016,2)),
class = c(rep("A", 3), rep("B", 2)),
origin = c("Europe", "Asia", "Africa", "Europe", "Asia"),
count = c(30299, 3, 34, 2, 800))
id year class origin count
1: 1 2015 A Europe 30299
2: 1 2015 A Asia 3
3: 1 2015 A Africa 34
4: 1 2016 B Europe 2
5: 1 2016 B Asia 800
但有些信息不正确。我想用另一个 data.table:
覆盖该区域 data.table(id = c(1),
year = c(2015,2016),
class = c("A", "B"),
origin = c("Europe", "Asia"))
id year class origin
1: 1 2015 A Europe
2: 1 2016 B Asia
这样原来的table就变成了:
id year class origin count
1: 1 2015 A Europe 30299
2: 1 2015 A Europe 3
3: 1 2015 A Europe 34
4: 1 2016 B Asia 2
5: 1 2016 B Asia 800
我尝试用 merge
和 within
来做这件事,但我遇到了错误。
我将您的第一个 data.table 命名为 dt_A
,第二个命名为 dt_B
并假设您通过 id
、year
和 class
.
dt_A[dt_B, on = c("id", "year", "class"), origin := i.origin]
returns
id year class origin count
1: 1 2015 A Europe 30299
2: 1 2015 A Europe 3
3: 1 2015 A Europe 34
4: 1 2016 B Asia 2
5: 1 2016 B Asia 800
基本上我们进行了左连接以获取所需的数据并更新了 origin
列。