gpt4 book ai didi

对于在时间 1 和时间 2 之间未发生任何更改的情况,删除所有 ID 的情况

转载 作者:行者123 更新时间:2023-12-04 17:10:48 24 4
gpt4 key购买 nike

我有两个包含一系列案例的数据框。一个来自时间 1,一个来自时间 2。我正在寻找一种方法来快速识别在时间 1 和时间 2 之间发生变化的情况,我有点卡住了。

这是一个例子。所以,我有一个从时间 1 开始的数据框,

df.t1 <- data.frame(id = c(1,1,1,2,2,3,3,5,5,6), ABC = LETTERS[1:10], Num = 101:110)

它看起来像这样,
df.t1
id ABC Num
1 1 A 101
2 1 B 102
3 1 C 103
4 2 D 104
5 2 E 105
6 3 F 106
7 3 G 107
8 5 H 108
9 5 I 109
10 6 J 110

时间二滚
df.t2 <- df.t1

并且发生了一些变化,
df.t2[3,3] <- 104
df.t2[2,2] <- "H"
df.t2[8,3] <- 999
df.t2[10,3] <- NA
df.t2[11,] <- c(3, "J", 107)

这是时间2,
df.t2
id ABC Num
1 1 A 101
2 1 H 102
3 1 C 104
4 2 D 104
5 2 E 105
6 3 F 106
7 3 G 107
8 5 H 999
9 5 I 109
10 6 J <NA>
11 3 J 107

我现在正在寻找一种快速方法来删除案例,所有 id,对于在时间 1 和时间 2 之间的案例(任何行)中没有发生任何变化的案例。在特定示例中,只有 id #2 没有变化发生在时间 1 和时间 2 之间。

我正在寻找看起来像这样的最终结果,
(df <- subset(df.t2, id != 2))
id ABC Num
1 1 A 101
2 1 H 102
3 1 C 104
6 3 F 106
7 3 G 107
8 5 H 999
9 5 I 109
10 6 J <NA>
11 3 J 107

任何帮助,将不胜感激。

最佳答案

我认为这会奏效。使用 data.table 的解决方案:

require(data.table)
dt1 <- data.table(df.t1)
dt2 <- data.table(df.t2)
# your conversion made them characters
dt2[, `:=`(id = as.numeric(id), Num = as.numeric(Num))]
setkey(dt1, "id", "ABC")
setkey(dt2, "id", "ABC")
dt <- dt1[dt2]
dt2[id %in% dt[, !(all(Num == Num.1)) | any(is.na(c(Num, Num.1))), by=id][V1 == TRUE]$id]

# id ABC Num
# 1: 1 A 101
# 2: 1 C 104
# 3: 1 H 102
# 4: 3 F 106
# 5: 3 G 107
# 6: 3 J 107
# 7: 5 H 999
# 8: 5 I 109
# 9: 6 J NA

或者,在获得 dt = dt1[dt2] 后:
dt2[id %in% dt[, ctr := Num %in% Num.1, by=1:nrow(dt)][ctr == FALSE, unique(id)]]

关于对于在时间 1 和时间 2 之间未发生任何更改的情况,删除所有 ID 的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14865798/

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