我有2个数组,X和Y.X有很多NA,其中Y有值。我想用N替换Y中的值以与X中的NA相对应,我想使用此函数来循环许多文件。我尝试了ifelse,但产生了所有的NA。我试过Cbind,但仍然没有成功,见下文。请有人告诉我代码
Jan Feb Mar Apr May Jun Jul
[1,] NA NA NA NA NA NA -5.5
[2,] NA NA NA NA NA NA NA
[3,] NA NA NA NA NA NA NA
[4,] NA NA NA NA NA NA NA
[5,] NA NA NA NA NA NA NA
[6,] 24.4 24.9 22.9 21.9 19.5 20.1 18.1
> head(Y)
Jan Feb Mar Apr May Jun Jul
[1,] NA NA NA NA NA NA 18.47
[2,] 22.17 22.57 22.54 21.88 20.45 19.35 18.23
[3,] 22.07 23.10 22.78 21.73 20.38 19.16 18.54
[4,] 22.48 23.09 21.68 20.59 19.84 19.00 19.54
[5,] 20.79 22.32 22.16 22.05 20.27 20.25 18.55
[6,] 23.03 23.27 23.52 21.74 20.81 19.96 18.38
答案 0 :(得分:1)
您可以在矩阵(或数组)上使用is.na
来识别缺少的元素。然后,有选择地更新所需矩阵的元素,这些元素对应于另一个矩阵中的缺失值。
# Generate sample data
set.seed(1)
m <- 6
n <- 7
# A matrix with lots of missing values
X <- matrix(sample(c(NA, 1:3), size = m*n, replace = TRUE, prob = c(.7, .1, .1, .1)), ncol = n)
X
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] NA NA 2 NA 3 NA
[2,] NA NA NA NA NA 2
[3,] NA NA 2 NA NA NA
[4,] 1 NA 1 NA NA 2
[5,] NA NA NA NA NA NA
[6,] 3 NA 2 NA NA 3
[7,] 1 NA 1 NA 3 NA
# A matrix with fewer missing values
Y <- matrix(sample(c(NA, 4:6), size = m*n, replace = TRUE), ncol = n)
Y
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 6 5 4 4 4 4
[2,] 5 4 5 5 6 6
[3,] 5 6 5 4 4 6
[4,] 6 4 4 4 4 4
[5,] NA NA 6 6 4 5
[6,] 4 NA 4 NA 6 4
[7,] 5 NA 4 6 6 4
# The key is that using is.na on a matrix returns a logical matrix
is.na(Y)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] FALSE FALSE FALSE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE FALSE FALSE
[4,] FALSE FALSE FALSE FALSE FALSE FALSE
[5,] TRUE TRUE FALSE FALSE FALSE FALSE
[6,] FALSE TRUE FALSE TRUE FALSE FALSE
[7,] FALSE TRUE FALSE FALSE FALSE FALSE
# Set Y missing where X is missing
Y[is.na(X)] <- NA
# Show new Y
Y
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] NA 5 NA NA NA NA 6
[2,] NA NA NA 4 NA NA NA
[3,] NA NA 4 4 NA NA 4
[4,] 6 NA NA NA NA NA NA
[5,] NA NA 5 NA 4 6 4
[6,] 4 NA 4 NA NA NA NA
答案 1 :(得分:0)
如果您希望对同一维度的两个数据框执行此操作,则可以使用此功能。
m <- matrix(sample(c(NA, 1:10), 100, replace = TRUE), 10)
n <- matrix(sample(c(NA, 1:10), 100, replace = TRUE), 10)
y <- which(is.na(m) == TRUE) #index na's
m[y] <- n[y] #replace na's
我不清楚如何在多个数据帧上循环这个,你能提供一个例子吗?