Организовать строки подгруппы (текст) - PullRequest
3 голосов
/ 19 октября 2019

Я пытаюсь преобразовать что-то вроде этого df формат:

df <- data.frame(first = c("a", "a", "b", "b", "b", "c"), 
  words =c("about", "among", "blue", "but", "both", "cat"))

df
  first words
1     a about
2     a among
3     b  blue
4     b   but
5     b  both
6     c   cat

в следующий формат:

df1
  first           words
1     a    about, among
2     b blue, but, both
3     c             cat
> 

Я пытался

aggregate(words ~ first, data = df, FUN = list)

  first   words
1     a    1, 2
2     b 3, 5, 4
3     c       6

и tidyverse:

df %>%
  group_by(first) %>% 
  group_rows()

Любые предложения будут оценены!

Ответы [ 2 ]

2 голосов
/ 19 октября 2019

A data.table решение:

library(data.table)

df <- data.frame(first = c("a", "a", "b", "b", "b", "c"), 
  words =c("about", "among", "blue", "but", "both", "cat"))

df <- setDT(df)[, lapply(.SD, toString), by = first]

df
#    first           words
# 1:     a    about, among
# 2:     b blue, but, both
# 3:     c             cat

# convert back to a data.frame if you want
setDF(df)
1 голос
/ 19 октября 2019

Используя tidyverse, после group_by используйте summarise для paste

library(dplyr)
df %>% 
  group_by(first) %>%
  summarise(words = toString(words))
# A tibble: 3 x 2
#  first words          
#  <fct> <chr>          
#1 a     about, among   
#2 b     blue, but, both
#3 c     cat           

или оставьте его как list столбец

df %>%
  group_by(first) %>%
  summarise(words = list(words))
...