我有以下问题:转换4D数字阵列分类
我有一个四维阵列,比方说,例如
a <- array(seq(1,2*3*4*2), c(2,3,4,2))
a[1,2,3,2] <- NaN
我需要用一定的数组转换为分类数据阈。作为一个例子,它可能类似于a[ a > 10 ] <- "1"
和a[ a <= 10 ] <- "0"
。
现在的问题是,NaN值也转换为“0”。
我该怎么做?
我有以下问题:转换4D数字阵列分类
我有一个四维阵列,比方说,例如
a <- array(seq(1,2*3*4*2), c(2,3,4,2))
a[1,2,3,2] <- NaN
我需要用一定的数组转换为分类数据阈。作为一个例子,它可能类似于a[ a > 10 ] <- "1"
和a[ a <= 10 ] <- "0"
。
现在的问题是,NaN值也转换为“0”。
我该怎么做?
这里的交易...你的第一个操作的转换是NaN
为“南”,这是不是一个NaN
。自从您将其更改为字符向量后,该阵列下面的原子向量无法保存真实的NaN
。
, , 3, 2
[,1] [,2] [,3]
[1,] "1" "NaN" "1"
[2,] "1" "1" "1"
第二个比较和分配转换为
, , 3, 2
[,1] [,2] [,3]
[1,] "0" "NaN" "0"
[2,] "0" "0" "0"
所以我有点困惑你的要求,它得到转换为“0”。您可能仍然疑惑什么其他价值得到了转换成零,但通过这种操作说明:
> "1" <= 10
[1] TRUE
这也提供了什么,我想你想:
a[] <- ifelse(is.na(a), "NaN",
ifelse(a >10 , "1", "0"))
#Check
table(a, useNA="always")
#----
a
0 1 NaN <NA>
10 37 1 0
如果您正在准备与整数1
和0
,而不是字符"1"
和"0"
工作,那么所有你需要做的是
a[] <- as.numeric(a>10)
[]
确保保留a
的结构 - 否则它将成为矢量。 as.numeric
只是将逻辑TRUE/FALSE
转换为1/0
。 NaN
变成NA
。
你再拿到
a
, , 1, 1
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
, , 2, 1
[,1] [,2] [,3]
[1,] 0 0 1
[2,] 0 0 1
, , 3, 1
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
, , 4, 1
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
, , 1, 2
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
, , 2, 2
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
, , 3, 2
[,1] [,2] [,3]
[1,] 1 NA 1
[2,] 1 1 1
, , 4, 2
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
难道你的意思是'一个[A> 10 is.nan(一)!< - 1; a [a <= 10&!is.nan(a)] < - 0' – akrun
@akrun但是数据并不是绝对的。只要我'a [a> 10&!is.nan(a)] < - “1”'所有的NaN值都被转换为“1”或“0”。 – D1X
或者只是'a [] < - as.numeric(a> 10)'会做到这一点('NaN'转换为'NA') –