2013-04-02 13 views
16

मैं दो बातें की कोशिश करना चाहते में:एनए/NaN/Inf निकालें एक मैट्रिक्स

  1. मैं कैसे पंक्तियों को एनए/NaN/Inf
  2. शामिल मैं कैसे एनए से डेटा बिंदु के मूल्य स्थापित कर सकता को दूर करना/NaN/Inf 0.

अब तक, मैं एनए मूल्यों के लिए निम्नलिखित का उपयोग कर की कोशिश की है, लेकिन चेतावनी मिल रहा।

> eg <- data[rowSums(is.na(data)) == 0,] 
Error in rowSums(is.na(data)) : 
     'x' must be an array of at least two dimensions 
    In addition: Warning message: 
    In is.na(data) : is.na() applied to non-(list or vector) of type 'closure' 
+2

चेतावनी क्योंकि आप 'डेटा' है, जो भी' utils' पैकेज में एक समारोह है परिभाषित नहीं किया है। यानी, आप एक समारोह पर 'is.na' को बुला रहे थे, जो समझ में नहीं आता है। –

+0

संबंधित पोस्ट: https://stackoverflow.com/questions/7518245/one-function-to-detect-nan-na-inf-inf-etc – zx8754

उत्तर

12
library(functional) 
m[apply(m, 1, Compose(is.finite, all)),] 

प्रदर्शन:

m <- matrix(c(1,2,3,NA,4,5), 3) 
m 
##  [,1] [,2] 
## [1,] 1 NA 
## [2,] 2 4 
## [3,] 3 5 

m[apply(m, 1, Compose(is.finite, all)),] 
##  [,1] [,2] 
## [1,] 2 4 
## [2,] 3 5 

नोट: Compose(is.finite, all)function(x) all(is.finite(x))

के बराबर है 0 करने के लिए मूल्यों को निर्धारित करने के लिए, उपयोग मैट्रिक्स स्वतंत्र जिंग:

m[!is.finite(m)] <- 0 
m 
##  [,1] [,2] 
## [1,] 1 0 
## [2,] 2 4 
## [3,] 3 5 
+0

मैं अभी भी देखता हूं- मूल्य – user2199881

+0

में यह 'Inf' के लिए काम नहीं करेगा । आपको 'is.finite' की आवश्यकता है। –

+0

ओह, क्षमा करें, इन्फ याद किया। –

3

बस एक और रास्ता (पहला सवाल के लिए):

m <- structure(c(1, 2, 3, NA, 4, 5, Inf, 5, 6, NaN, 7, 8), 
       .Dim = c(4L, 3L)) 
#  [,1] [,2] [,3] 
# [1,] 1 4 6 
# [2,] 2 5 NaN 
# [3,] 3 Inf 7 
# [4,] NA 5 8 

m[complete.cases(m * 0), , drop=FALSE] 
#  [,1] [,2] [,3] 
# [1,] 1 4 6 

मैं और कुछ दूसरे भाग के लिए मैथ्यू के जवाब के अलावा अन्य सोच भी नहीं सकते।

31

मुझे लगता है कि मैं अपना पसंदीदा तरीकों के साथ रिंग में मेरी टोपी फेंक देंगे:

# sample data 
m <- matrix(c(1,2,NA,NaN,1,Inf,-1,1,9,3),5) 
# remove all rows with non-finite values 
m[!rowSums(!is.finite(m)),] 
# replace all non-finite values with 0 
m[!is.finite(m)] <- 0 
8

NaRV.omit (x) है सवाल 1. स्मरक NaRV के लिए मेरी पसंदीदा विकल्प का अर्थ है "नहीं एक नियमित रूप से मूल्य" ।

require(IDPmisc) 
m <- matrix(c(1,2,3,NA,5, NaN, 7, 8, 9, Inf, 11, 12, -Inf, 14, 15), 5) 
> m 
    [,1] [,2] [,3] 
[1,] 1 NaN 11 
[2,] 2 7 12 
[3,] 3 8 -Inf 
[4,] NA 9 14 
[5,] 5 Inf 15 
> NaRV.omit(m) 
    [,1] [,2] [,3] 
[1,] 2 7 12 
attr(,"na.action") 
[1] 1 3 4 5 
attr(,"class") 
[1] "omit" 
संबंधित मुद्दे