2011-04-12 8 views

Odpowiedz

27

Chcesz przeczytać "Wprowadzenie do R". Twoja odpowiedź to po prostu

sum( x < 0 ) 

która działa dzięki wektoryzacji. Wyrażenie x < 0 zwraca wektor wartości binarnych, nad którymi może działać sum() (przez zamianę wartości binarnych na standardowe wartości 0/1).

+0

Wektor nie przekształca się do liczby (w późniejszych wersjach R tak) - suma logiczna pracuje na wprost. Można to łatwo zaobserwować. 'x <- rep (c (T, F), 2^30-1) powoduje, że moja sesja R RSS wzrośnie do ~ 8G. 'sum (x)' nie zwiększa tego. Jednakże 'suma (as.numeric (x))' powoduje, że RSS wzrasta do ~ 25G (i oczywiście zwraca tę samą wartość). –

+0

Jeśli zbiór danych ma wartości NA, polecenie powinno być sumą (x <0, na.rm = TRUE). W przeciwnym razie zwraca NA w wyniku – andrii

0

Jest dobra odpowiedź na to pytanie od Steve Lianoglou How to identify the rows in my dataframe with a negative value in any column?

Niech mi tylko replikować jego kodu z jednym niewielkim dodatkiem (4 pkt).

  1. Wyobraź sobie, że miał data.frame takiego:

    df <- data.frame(a = 1:10, b = c(1:3,-4, 5:10), c = c(-1, 2:10)) 
    
  2. To spowoduje powrót logiczną wektor które wiersze mają wartości ujemne:

    has.neg <- apply(df, 1, function(row) any(row < 0)) 
    
  3. Oto indeksy dla liczb ujemnych:

    which(has.neg) 
    
  4. Tutaj jest liczbą elementów z numerami ujemnymi:

    length(which(has.neg)) 
    
+1

OP ma wektor, więc coś podobnego do długości (x [x <0]) będzie działać. –

Powiązane problemy