gruppierte Operationen, die Ergebnis von der Länge nicht gleich um 1 oder die Länge der Gruppe in dplyr

Ich bin mir nicht sicher, welche Funktion verwenden, um Folgendes zu tun:

library(data.table)
dt = data.table(a = 1:4, b = 1:2)

dt[, rep(a[1], 3), by = b]
#   b V1
#1: 1  1
#2: 1  1
#3: 1  1
#4: 2  2
#5: 2  2
#6: 2  2

Beide summarise und mutate sind unglücklich mit dieser Länge:

library(dplyr)
df = data.frame(a = 1:4, b = 1:2)

df %.% group_by(b) %.% summarise(rep(a[1], 3))
#Error: expecting a single value

df %.% group_by(b) %.% mutate(rep(a[1], 3))
#Error: incompatible size (3), expecting 2 (the group size) or 1
  • Weiß nicht, ob es hilft, aber mit Ihren dplyr - code mit einem data.table arbeiten und mit plyr kannst du auch mit einem data.frame.
  • danke, das ist interessant (so schön dies ist meist nur eine übung für mich um zu verstehen, wie dplyr - ich weiß nicht wirklich den Punkt sehen, der es mit einem data.table); klingt wie ein bug in summarise dann
  • Siehe github.com/hadley/dplyr/issues/154
  • +1 Dies ist ein interessanter Unterschied; hoffentlich die endgültige Lösung kann beliebige return-Längen für alle Gruppen.
  • In diesem Fall df %>% group_by(b) %>% slice(rep(1, 3)) funktioniert einwandfrei. Für rowwise Operationen, in denen jede Zeile gibt eine beliebige Anzahl von Werten, die Sie verwenden können, die df %>% mutate(new = map(old, f)) %>% unnest() idiom.
InformationsquelleAutor eddi | 2014-02-12
Schreibe einen Kommentar