Как объединить элементы dataframe в один ряд - PullRequest
0 голосов
/ 15 октября 2019

У меня есть такой фрейм данных:

df <- data.frame("COL_1" = "a", "COL_2" = c("a","b","c"), "COL_3" = "b", "COL_4" = "c", "COL_6" = "d")

Вывод:

  DB_INDEX|COL_2|COL_3|COL_4|COL_6
1     a     a     b     c     d
2     a     b     b     c     d
3     a     c     b     c     d

Я хотел бы создать новый фрейм данных, содержащий только одну строку, например:

Expected_output:

 DB_INDEX|COL_2|COL_3|COL_4|COL_6
1     a  [a,b,c]  b     c     d

Итак, в основном я хотел бы «сгруппировать» по столбцам db_index, 3,4,6 и создать список значений, где они различаются в col_2. DB_INDEX, COL_3, COL_4, COL_5 всегда будут иметь одинаковое значение, меняется только COL_2.

Есть идеи, которые могут мне помочь?

отредактировано

Я нашел это:

  df <- df %>% group_by(COL_1) %>% 
    mutate(COL_2 = paste0(COL_2, collapse = " "))

Но он возвращает строку, поэтому я попытался изменить ее следующим образом:

  df <- df %>% group_by(COL_1) %>% 
    mutate(COL_2 = as.list(COL_2)

Но он возвращает эту ошибку:

replacement has 2 rows, data has 1 

COL_2 строка должна содержать список, я знаю, в Python Pandas это возможно, это в R?

Это мой первыйнеделю в R, так что я нахожу некоторые проблемы. Заранее спасибо:)

1 Ответ

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

Вы можете попробовать:

df %>%
 group_by(DB_INDEX) %>%
 summarise_all(~ list(unique(.)))

  DB_INDEX COL_2     COL_3     COL_4     COL_6    
  <chr>    <list>    <list>    <list>    <list>   
1 a        <chr [3]> <chr [1]> <chr [1]> <chr [1]>
...