So wählen Sie nicht-numerische Spalten mit dplyr::select_if

Brauche ich, um wählen Sie alle Spalten, die nicht numerisch sind. Kann ich wählen Sie alle numerischen Spalten einfach mit select_if:

mtcars %>% select_if(is.numeric)

Was ist, wenn ich wählen möchten non-numeric Spalten? Ich habe versucht:

mtcars %>% select_if(!is.numeric)

Aber ich bekam die Fehlermeldung unten:

Error in !is.numeric : invalid argument type

Vielen Dank für die Hilfe!

InformationsquelleAutor zesla | 2018-01-24

 

3 Replies
  1. 25

    Können Sie purrr’s negate() enthalten ist, wenn Sie library(tidyverse) anstatt nur library(dplyr)

    library(tidyverse)
    iris %>% select_if(negate(is.numeric))
  2. 6

    Können Sie eine purrr-Stil anonyme Funktion, vorausgesetzt du hast eine halbwegs aktuelle version von dplyr:

    library(dplyr)
    
    iris %>% select_if(~!is.numeric(.x)) %>% head()
    #>   Species
    #> 1  setosa
    #> 2  setosa
    #> 3  setosa
    #> 4  setosa
    #> 5  setosa
    #> 6  setosa

    oder die old-style – funs notation funktioniert immer noch, z.B.

    iris %>% select_if(funs(!is.numeric(.))) %>% head()
    #>   Species
    #> 1  setosa
    #> 2  setosa
    #> 3  setosa
    #> 4  setosa
    #> 5  setosa
    #> 6  setosa
    • fantastisch – auch wenn @MrFlick ’s Lösung funktioniert, ich Liebe es, dass diese Lösung mehr, da brauchen Sie nicht zum laden einer anderen Bibliothek. Nur eine kleine Sache: der obige code funktioniert auch mit dem dot (.) statt (.x) wie in iris %>% select_if(~!is.numeric(.))
    • Ja, ich benutze .x im purrr-Stil-Funktionen, weil es leichter ist zu unterscheiden von der Verwendung . zu sagen, die Rohre, wo die Daten.
    • Oh, ich sehe, ich dachte, Sie müssen das dplyr-syntax für das weitergeleitete Objekt. Wusste nicht, über die purr-Stil pipe-id, vielen Dank
  3. 2

    Eine mögliche Lösung könnte sein:

    df[, !(names(df) %in% names(df %>% select_if(is.numeric)))]
    
    Example:
    df <- data.frame(
      name = c( "a", "b", "c", "d" ),
      last_name = c( "r", "t", "s", "b" ),
      x = c( 3, 2, 1, 2 ),
      y = c( 4, 3, 4, 3 ),
      z = c( 8, 9, 6, 7 ) , stringsAsFactors = FALSE)
    > df[, !(names(df) %in% names(df %>% select_if(is.numeric)))]
    #  name last_name
    #1    a         r
    #2    b         t
    #3    c         s
    #4    d         b

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.