Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在阵列中,将某些数据行中的NAs设置为0_Arrays_R - Fatal编程技术网

Arrays 在阵列中,将某些数据行中的NAs设置为0

Arrays 在阵列中,将某些数据行中的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

我有一个数组,其中包含一些实际上应该为“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 <- 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