gpt4 book ai didi

r - 将 roll=TRUE 与allow.cartesian=TRUE 一起使用

转载 作者:行者123 更新时间:2023-12-02 12:10:12 25 4
gpt4 key购买 nike

进行笛卡尔连接并使用前滚功能的最佳方法是什么,但将前滚功能应用于连接表中的每个替代系列,而不是整个系列。

最好用一个例子来解释:

library(data.table)
A = data.table(x = c(1,2,3,4,5), y = letters[1:5])
B = data.table(x = c(1,2,3,1,4), f = c("Alice","Alice","Alice", "Bob","Bob"), z = 101:105)
setkey(B,x)
C = B[A, roll = TRUE, allow.cartesian=TRUE, rollends = FALSE]

A
B
C[f == "Alice"]
C[f == "Bob"]
C

所以我们有两个起始表:

> A
x y
1: 1 a
2: 2 b
3: 3 c
4: 4 d
5: 5 e
> B
x f z
1: 1 Alice 101
2: 1 Bob 104
3: 2 Alice 102
4: 3 Alice 103
5: 4 Bob 105

我想加入这些,以便我在 A对于每个 x 值都有 AliceBob 行,如果其中任何一个缺失,则向前滚动(但不会滚动到末尾)。这不太有效,因为我目前已经得到了它:

> C[f == "Alice"]
x f z y
1: 1 Alice 101 a
2: 2 Alice 102 b
3: 3 Alice 103 c
> C[f == "Bob"]
x f z y
1: 1 Bob 104 a
2: 4 Bob 105 d
> C
x f z y
1: 1 Alice 101 a
2: 1 Bob 104 a
3: 2 Alice 102 b
4: 3 Alice 103 c
5: 4 Bob 105 d
6: 5 NA NA e

因为 Alice 存在于 2 和 3 中,所以它不会向前滚动 Bob 的数据。我需要鲍勃的额外行,所以我想得到:

> C[f == "Alice"]
x f z y
1: 1 Alice 101 a
2: 2 Alice 102 b
3: 3 Alice 103 c
> C[f == "Bob"]
x f z y
1: 1 Bob 104 a
2: 2 Bob 104 b # THESE ROWS ARE MISSING
3: 3 Bob 104 c # THESE ROWS ARE MISSING
4: 4 Bob 105 d
> C
x f z y
1: 1 Alice 101 a
2: 1 Bob 104 a
3: 2 Alice 102 b
4: 2 Bob 104 b # THESE ROWS ARE MISSING
5: 3 Alice 103 c
6: 3 Bob 104 c # THESE ROWS ARE MISSING
7: 4 Bob 105 d
8: 5 NA NA e

最佳答案

给你:

setkey(B, f, x)

setkey(B[CJ(unique(f), unique(x)), allow.cartesian = T,
roll = T, rollends = c(F,F)], x)[A, allow.cartesian = T]
# x f z y
#1: 1 Alice 101 a
#2: 1 Bob 104 a
#3: 2 Alice 102 b
#4: 2 Bob 104 b
#5: 3 Alice 103 c
#6: 3 Bob 104 c
#7: 4 Alice NA d
#8: 4 Bob 105 d
#9: 5 NA NA e

您可以过滤掉 NA 以满足您的需求。

关于r - 将 roll=TRUE 与allow.cartesian=TRUE 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22863414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com