我有一个包含一些NAs的数组,实际上应该是'0'。
示例:
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
答案 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
值在一行中有一些数字。