在数组中,将行中的NAs设置为0

时间:2015-09-30 11:17:07

标签: arrays r

我有一个包含一些NAs的数组,实际上应该是'0'。

  • 我认为数据为'行',例如[1,1]是一行,[1,,2]是另一行,[2,,1]
  • 某些此类[a,b]组合应包含所有NA,并应保持原样。
  • 某些“行”包含至少一个非缺失值。在这种情况下,该行中的所有NA都应设置为零。

示例:

def up
    System.all.each do |sys|
        sys.operation = sys.operation_str.to_i # replace it with your converter
    end
    remove_column :systems, :operation
end

应该是这样的

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()但没有得到任何颜色

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

1 个答案:

答案 0 :(得分:3)

你可以这样做:

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[i,,])), dim(a1[i,,]))是一个布尔矩阵,其中带有数值的行具有所有TRUE个元素。如果你在我们第一次穿透循环时操作它(i=1,那么对于a1[1,,]),我们得到了:

#> 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

布尔矩阵array(!!rowSums(!is.na(a1[i,,])), dim(a1[i,,])) & is.na(a1[i,,]) - 根据需要 - 只有TRUE值的NA值在一行中有一些数字。