Arrays 在阵列中,将某些数据行中的NAs设置为0
我有一个数组,其中包含一些实际上应该为“0”的NAsArrays 在阵列中,将某些数据行中的NAs设置为0,arrays,r,Arrays,R,我有一个数组,其中包含一些实际上应该为“0”的NAs 我认为数据是“行”,例如[1,1]是一行,[1,2]是另一行,[2,1] 某些[a,b]组合应包含所有NAs,并应保持原样 某些“行”至少包含一个非缺失值。在这种情况下,该行中的所有NAs都应设置为零 例如: x <- c(rep(NA,14),rep(NA,4),20,30,40,rep(NA,6),10, rep(NA,7),rep(NA,4),20,30,40,rep(NA,6),10,rep(NA,7)) a1
- 我认为数据是“行”,例如[1,1]是一行,[1,2]是另一行,[2,1]
- 某些[a,b]组合应包含所有NAs,并应保持原样
- 某些“行”至少包含一个非缺失值。在这种情况下,该行中的所有NAs都应设置为零
x <- c(rep(NA,14),rep(NA,4),20,30,40,rep(NA,6),10,
rep(NA,7),rep(NA,4),20,30,40,rep(NA,6),10,rep(NA,7))
a1 <- array(x,dim=c(2,7,4))
a1[1,,]
[,1] [,2] [,3] [,4]
[1,] NA NA NA NA
[2,] NA NA NA NA
[3,] NA 20 NA NA
[4,] NA 40 NA 10
[5,] NA NA NA NA
[6,] NA NA NA NA
[7,] NA NA 30 NA
我尝试过使用函数和apply(),但没有成功
set0 <- function(x) { if (sum(is.na(x)) < length(x)) { x[is.na(x)] <- 0 } }
set0您可以执行以下操作:
for (i in seq(dim(a1)[1])){
a1[i,,][array(!!rowSums(!is.na(a1[i,,])), dim(a1[i,,])) & is.na(a1[i,,])] <- 0
}
#> a1[1,,]
# [,1] [,2] [,3] [,4]
#[1,] NA NA NA NA
#[2,] NA NA NA NA
#[3,] 0 20 0 0
#[4,] 0 40 0 10
#[5,] NA NA NA NA
#[6,] NA NA NA NA
#[7,] 0 0 30 0
#> a1[2,,]
# [,1] [,2] [,3] [,4]
#[1,] NA NA NA NA
#[2,] NA NA NA NA
#[3,] 0 30 0 0
#[4,] NA NA NA NA
#[5,] NA NA NA NA
#[6,] 0 0 20 0
#[7,] 0 10 40 0
布尔矩阵数组(!!行和(!is.na(a1[i,,])、dim(a1[i,,])和is.na(a1[i,,])
根据您的需要,只为带有一些数字的行上的na
值取TRUE
值。不用担心!数组不是那么容易的问题,我会推荐R中其他更友好的结构。。。但也许你绝对需要阵列!本例中的数组在理解数据方面有很大的优势,每个受访者都有一个矩阵。我真的很喜欢你的双重索引,我仍然在了解它的工作原理。为了R的完整性/创造性,就在我发布后,我提出了一个不那么优雅的解决方案:rows.w.data希望解释能有所帮助。确实如此,非常感谢!我不知道代码>--这里的操作与>0
相同,对吗?你的解决方案和我的没有太大区别!:)虽然更优雅。再次感谢。
for (i in seq(dim(a1)[1])){
a1[i,,][array(!!rowSums(!is.na(a1[i,,])), dim(a1[i,,])) & is.na(a1[i,,])] <- 0
}
#> a1[1,,]
# [,1] [,2] [,3] [,4]
#[1,] NA NA NA NA
#[2,] NA NA NA NA
#[3,] 0 20 0 0
#[4,] 0 40 0 10
#[5,] NA NA NA NA
#[6,] NA NA NA NA
#[7,] 0 0 30 0
#> a1[2,,]
# [,1] [,2] [,3] [,4]
#[1,] NA NA NA NA
#[2,] NA NA NA NA
#[3,] 0 30 0 0
#[4,] NA NA NA NA
#[5,] NA NA NA NA
#[6,] 0 0 20 0
#[7,] 0 10 40 0
#> array(!!rowSums(!is.na(a1[1,,])), dim(a1[1,,]))
# [,1] [,2] [,3] [,4]
#[1,] FALSE FALSE FALSE FALSE
#[2,] FALSE FALSE FALSE FALSE
#[3,] TRUE TRUE TRUE TRUE
#[4,] TRUE TRUE TRUE TRUE
#[5,] FALSE FALSE FALSE FALSE
#[6,] FALSE FALSE FALSE FALSE
#[7,] TRUE TRUE TRUE TRUE