相关疑难解决方法(0)

使用data.table包通过引用进行条件二进制连接和更新

所以这是我现实生活中的问题,我觉得这个问题很容易解决,我在这里遗漏了一些明显的东西.我有两个叫做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)

join r data.table

8
推荐指数
2
解决办法
489
查看次数

加入多个键和条件更新

我希望能够有条件地更新列,其中一个条件基于多个键上的表连接.有没有其他方法比使用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)

r data.table

6
推荐指数
0
解决办法
84
查看次数

有没有办法在将一个data.frame连接到另一个data.frame时替换匹配行上的列值?

我正在努力通过一些参考专栏将一个数据表的元素与另一个"主"集合在一起.为了使事情更清楚,我创建了一些示例数据:

这是我想要加入另一个"主集"的数据集.

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)

我打得周围的一些东西dplyrdata.table包,但似乎无法真正找出这样做的一个很好的和直接的方式.非常感谢建议,非常感谢.

join r dataframe dplyr data.table

3
推荐指数
1
解决办法
1995
查看次数

标签 统计

data.table ×3

r ×3

join ×2

dataframe ×1

dplyr ×1