所以这是我现实生活中的问题,我觉得这个问题很容易解决,我在这里遗漏了一些明显的东西.我有两个叫做TK和的大数据集DFT
library(data.table)
set.seed(123)
(TK <- data.table(venue_id = rep(1:3, each = 2),
DFT_id = rep(1:3, 2),
New_id = sample(1e4, 6),
key = "DFT_id"))
# venue_id DFT_id New_id
# 1: 1 1 2876
# 2: 1 2 7883
# 3: 2 3 4089
# 4: 2 1 8828
# 5: 3 2 9401
# 6: 3 3 456
(DFT <- data.table(venue_id = rep(1:2, each = 2),
DFT_id = 1:4,
New_id = sample(4),
key = "DFT_id"))
# venue_id DFT_id New_id …Run Code Online (Sandbox Code Playgroud) 我希望能够有条件地更新列,其中一个条件基于多个键上的表连接.有没有其他方法比使用ifelse这样做?
例如,我想根据连接更新标志,但首先排除状态不是NA的地方:
library(data.table)
dt_A <- data.table(key1 = LETTERS[1:6], key2 = (1:6), flag=NA_character_ )
dt_A[4, flag:="exclude"]
dt_B <- data.table(key1 = LETTERS[3:6], key2 = c(3:5,0L))
print(dt_A)
key1 key2 flag
1: A 1 NA
2: B 2 NA
3: C 3 NA
4: D 4 exclude
5: E 5 NA
6: F 6 NA
print(dt_B)
key1 key2
1: C 3
2: D 4
3: E 5
4: F 0
Run Code Online (Sandbox Code Playgroud)
使用ifelse达到了正确的结果:
dt_A[dt_B, flag:=ifelse(is.na(flag), "include", flag), on = c("key1","key2"), nomatch=0L]
print(dt_A) …Run Code Online (Sandbox Code Playgroud) 我正在努力通过一些参考专栏将一个数据表的元素与另一个"主"集合在一起.为了使事情更清楚,我创建了一些示例数据:
这是我想要加入另一个"主集"的数据集.
data.frame(refID = c(1,3,4,5,7,8), value = c(3.3,3.9,4.4,8.0,1.1,2.5))
refID value
1 3.3
3 3.9
4 4.4
5 8.0
7 1.1
8 2.5
Run Code Online (Sandbox Code Playgroud)
主集:
data.frame(refID = 1:9, value = rep(0,9))
refID value
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
Run Code Online (Sandbox Code Playgroud)
我基本上希望将第一个数据集中的值列发送到第二个数据集,但是如果存在间隙,则让它们的值为0.最终,我希望得到:
结果集:
refID value
1 3.3
2 0.0
3 3.9
4 4.4
5 8.0
6 0.0
7 1.1
8 2.5
9 0.0
Run Code Online (Sandbox Code Playgroud)
我打得周围的一些东西dplyr和data.table包,但似乎无法真正找出这样做的一个很好的和直接的方式.非常感谢建议,非常感谢.