2017-09-16 55 views
1

我有以下問題:轉換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」。

我該怎麼做?

+0

難道你的意思是'一個[A> 10 is.nan(一)!< - 1; a [a <= 10&!is.nan(a)] < - 0' – akrun

+0

@akrun但是數據並不是絕對的。只要我'a [a> 10&!is.nan(a)] < - 「1」'所有的NaN值都被轉換爲「1」或「0」。 – D1X

+0

或者只是'a [] < - as.numeric(a> 10)'會做到這一點('NaN'轉換爲'NA') –

回答

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 
0

如果您正在準備與整數10,而不是字符"1""0"工作,那麼所有你需要做的是

a[] <- as.numeric(a>10) 

[]確保保留a的結構 - 否則它將成爲矢量。 as.numeric只是將邏輯TRUE/FALSE轉換爲1/0NaN變成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