Mam problem z funkcją sumowania w group_by pakietu dplyr.
Tak wygląda ramka danych:
df <- read.table(text="id groups times strings
1 1 a 1 xxx
2 2 a 2 zzz
3 3 a 1 yyy
4 4 b 1 xxx
5 5 b 1 yyy
6 6 b 1 xxx
7 7 c 3 yyy
8 8 c 1 xxx
9 9 c 1 xxx
10 10 c 1 yyy", stringsAsFactors=FALSE)
Muszę pogrupować według zmiennej „groups”, aby uzyskać ramkę danych, która wygląda następująco:
view(group.df)
id2 groups2 c.string
1 1 a "xxx","zzz","zzz","yyy"
2 2 b "xxx","yyy","xxx"
3 3 c "yyy","yyy","yyy","xxx","xxx","yyy"
str(group.df)
"data.frame": 3 obs. of 3 variables:
$ id2 : int 1 2 3
$ groups2 : chr "a" "b" "c"
$ c.string: chr ""xxx","zzz","zzz","yyy"" ""xxx","yyy","xxx""
""yyy","yyy","yyy","xxx","xxx","yyy""
Mój problem polega na tym, że nie wiem, jak zakodować funkcję podsumowującą zagnieżdżoną w group_by, aby pomnożyć zmienną łańcuchową „df $ strings” przez wartość „df $ times”, tylko gdy „df $ times” wynosi> 1.
Dziękuję za pomoc.
Odpowiedzi:
0 dla odpowiedzi № 1Wygląda na to, że po prostu ignorujesz kolumnę id, więc to powinno działać
df %>%
group_by(groups) %>%
summarize(c.string=paste(sQuote(rep(strings, times)), collapse=","))
# groups c.string
# <chr> <chr>
# 1 a ‘xxx’,‘zzz’,‘zzz’,‘yyy’
# 2 b ‘xxx’,‘yyy’,‘xxx’
# 3 c ‘yyy’,‘yyy’,‘yyy’,‘xxx’,‘xxx’,‘yyy’