iXdi - Σύγχρονος προγραμματισμός

dplyr ομάδα με κολώνες που περιγράφονται ως διάνυσμα συμβολοσειρών

Προσπαθώ να ομαδοποιήσω πολλές στήλες στο πλαίσιο δεδομένων μου και δεν μπορώ να γράψω κάθε όνομα στήλης στη συνάρτηση group_by, επομένως θέλω να καλέσω τα ονόματα των στηλών ως διάνυσμα όπως:

cols <- colnames(mtcars)[grep("[a-z]{3,}$", colnames(mtcars))]
mtcars %>% filter(disp < 160) %>% group_by(cols) %>% summarise(n = n())

Αυτό επιστρέφει το σφάλμα:

Error in mutate_impl(.data, dots) : 
  Column `mtcars[colnames(mtcars)[grep("[a-z]{3,}$", colnames(mtcars))]]` must be length 12 (the number of rows) or one, not 7

Σίγουρα θέλω να χρησιμοποιήσω μια συνάρτηση dplyr για να το κάνω αυτό, αλλά δεν μπορώ να το καταλάβω.

20.12.2017

Απαντήσεις:


1

Μπορείτε να χρησιμοποιήσετε το group_by_at, όπου μπορείτε να μεταβιβάσετε ένα διάνυσμα χαρακτήρων ονομάτων στηλών ως μεταβλητές ομάδας:

mtcars %>% 
    filter(disp < 160) %>% 
    group_by_at(cols) %>% 
    summarise(n = n())
# A tibble: 12 x 8
# Groups:   mpg, cyl, disp, drat, qsec, gear [?]
#     mpg   cyl  disp  drat  qsec  gear  carb     n
#   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int>
# 1  19.7     6 145.0  3.62 15.50     5     6     1
# 2  21.4     4 121.0  4.11 18.60     4     2     1
# 3  21.5     4 120.1  3.70 20.01     3     1     1
# 4  22.8     4 108.0  3.85 18.61     4     1     1
# ...

Ή μπορείτε να μετακινήσετε την επιλογή στήλης μέσα στο group_by_at χρησιμοποιώντας τις λειτουργίες vars και τις βοηθητικές συναρτήσεις επιλογής στήλης:

mtcars %>% 
    filter(disp < 160) %>% 
    group_by_at(vars(matches('[a-z]{3,}$'))) %>% 
    summarise(n = n())

# A tibble: 12 x 8
# Groups:   mpg, cyl, disp, drat, qsec, gear [?]
#     mpg   cyl  disp  drat  qsec  gear  carb     n
#   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int>
# 1  19.7     6 145.0  3.62 15.50     5     6     1
# 2  21.4     4 121.0  4.11 18.60     4     2     1
# 3  21.5     4 120.1  3.70 20.01     3     1     1
# 4  22.8     4 108.0  3.85 18.61     4     1     1
# ...
20.12.2017
  • Σας ευχαριστούμε γι'αυτό. Έψαχνα και μάθαινα εδώ και μέρες για να ανακαλύψω ότι αυτό χρειαζόμουν. 03.02.2021

  • 2

    Πιστεύω ότι το group_by_at έχει πλέον αντικατασταθεί με τη χρήση ενός συνδυασμού των group_by και across. Και το summarise έχει ένα πειραματικό όρισμα .groups όπου μπορείτε να επιλέξετε πώς να χειριστείτε την ομαδοποίηση αφού δημιουργήσετε ένα συνοπτικό αντικείμενο. Εδώ είναι μια εναλλακτική που πρέπει να εξετάσετε:

    cols <- colnames(mtcars)[grep("[a-z]{3,}$", colnames(mtcars))]
    
    original <- mtcars %>% 
      filter(disp < 160) %>% 
      group_by_at(cols) %>% 
      summarise(n = n())
    
    superseded <- mtcars %>%
      filter(disp < 160) %>%
      group_by(across(all_of(cols))) %>%
      summarise(n = n(), .groups = 'drop_last')
    
    all.equal(original, superseded)
    

    Ακολουθεί μια ανάρτηση ιστολογίου που αναφέρεται σε περισσότερες λεπτομέρειες σχετικά με τη χρήση της συνάρτησης across: https://www.tidyverse.org/blog/2020/04/dplyr-1-0-0-colwise/

    13.08.2020
    Νέα υλικά

    5 αμυχές που πρέπει να γνωρίζετε για να γίνετε σπουδαίος προγραμματιστής.
    5 αμυχές που πρέπει να γνωρίζετε για να γίνετε σπουδαίος προγραμματιστής. Αυτές τις μέρες, πολλοί φιλοδοξούν να εργαστούν ως προγραμματιστές. Αλλά το να γίνεις σπουδαίος προγραμματιστής δεν..

    Πώς να εφαρμόσετε το Deep Learning σε δομημένα δεδομένα
    Η βαθιά μάθηση είναι ένα καυτό και περιζήτητο θέμα τώρα ως μέρες. Η επιτυχία του προέρχεται από το γεγονός ότι είναι εξαιρετικά αποτελεσματικό στην επίλυση σύνθετων προβλημάτων και στην επίτευξη..

    Είναι το AI καλύτερο από τα ζώα στο να βλέπουν στο σκοτάδι;
    Τέχνη Μηχανικής Εκμάθησης Είναι η τεχνητή νοημοσύνη καλύτερη από τα ζώα στο να βλέπουν στο σκοτάδι; Τα όρια της όρασης ρομπότ στο ακραίο σκοτάδι Μελέτη της συμπεριφοράς των ζώων τη..

    Νέα δυνατότητα: Αναπτύξτε περισσότερο τον ανοιχτό κώδικα με το IssueHunt Upvotes
    Είμαστε στην ευχάριστη θέση να σας παρουσιάσουμε τη νεότερη λειτουργία μας: IssueHunt Upvote , τον τέλειο τρόπο υποστήριξης, κοινής χρήσης και παρακολούθησης του αγαπημένου σας ανοιχτού..

    Πώς μπορώ να προσλάβω την κορυφαία εταιρεία ανάπτυξης JavaScript στην Ινδία 2022;
    Αν ψάχνετε να προσλάβετε μια εταιρεία ανάπτυξης JavaScript στην Ινδία; Η iWebServices είναι μία από τις κορυφαίες εταιρείες ανάπτυξης JavaScript , που σας παρέχει τις καλύτερες υπηρεσίες..

    Το C# 11 πρόκειται να κυκλοφορήσει τον Νοέμβριο. αυτά είναι τα κορυφαία χαρακτηριστικά
    Η επόμενη έκδοση της διάσημης αντικειμενοστρεφούς, ασφαλούς για τύπους γλώσσας προγραμματισμού της Microsoft, C# 11, έχει σχεδόν ολοκληρωθεί και συνεχίζει να προσθέτει λειτουργίες. Εδώ είναι..

    Σφάλμα: ESLint TypeError createRequire δεν είναι συνάρτηση
    Τρόπος διόρθωσης: Σφάλμα — Το ESLint TypeError createRequire δεν είναι συνάρτηση Ελέγξτε την έκδοση Node. Από το ESLint 7+ πρέπει να εκτελείτε Node 10.12.0 ή νεότερη έκδοση . Πρώτα..