gpt4 book ai didi

r - 如何将缺失值压缩到向量中

转载 作者:行者123 更新时间:2023-12-04 14:00:31 24 4
gpt4 key购买 nike

让我尝试使这个问题尽可能笼统。

假设我有两个变量 a 和 b。

a <- as.integer(runif(20, min = 0, max = 10))
a <- as.data.frame(a)
b <- as.data.frame(a[c(-7, -11, -15),])

所以 b 有 17 个观察值,是 a 的子集,有 20 个观察值。

我的问题如下:我将如何使用这两个变量来生成第三个变量 c,它像 a 有 20 个观察值但缺少观察值 7、11 和 15,并且其他观察值与 b 相同,但在的顺序?

或者换一种说法:我怎样才能将这些缺失的观察值压缩到位置 7、11 和 15 的变量 b 中?

这看起来很简单(可能确实如此),但我已经很久没有让它起作用了。

最佳答案

1) 循环 试试这个循环:

# test data
set.seed(123) # for reproducibility
a <- as.integer(runif(20, min = 0, max = 10))
a <- as.data.frame(a)
b <- as.data.frame(a[c(-7, -11, -15),])

# lets work with vectors
A <- a[[1]]
B <- b[[1]]

j <- 1
C <- A
for(i in seq_along(A)) if (A[i] == B[j]) j <- j+1 else C[i] <- NA

这使:
> C
[1] 2 7 4 8 9 0 NA 8 5 4 NA 4 6 5 NA 8 2 0 3 9

2)减少这是一个无循环版本:
f <- function(j, a) j + (a == B[j])
r <- Reduce(f, A, acc = TRUE)
ifelse(duplicated(r), NA, A)

给予:
[1]  2  7  4  8  9  0 NA  8  5  4 NA  4  6  5 NA  8  2  0  3  9

3) dtw .使用 dtw在同名的包中,我们可以得到一个紧凑的无环单线:
library(dtw)

ifelse(duplicated(dtw(A, B)$index2), NA, A)

给予:
[1]  2  7  4  8  9  0 NA  8  5  4 NA  4  6  5 NA  8  2  0  3  9

修订 添加了其他解决方案。

关于r - 如何将缺失值压缩到向量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23416899/

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