Chcę agregować dane.frame z dwiema kolumnami: w jednej kolumnie mam "Num", który jest numerem identyfikatorem, a drugi mam tekst. Ważne jest, aby zagregowany tekst ma przestrzeń między poszczególnymi częściami. Mój kod to:

data_aggr <- aggregate(
  x = data_aggr,
  FUN = paste,
  by = list(data_aggr$num)
)

Próbowałem oczywistych z FUN = paste(collapse = " ") i

FUN = paste,
collapse = " ",

Ale to nie działa. Jak muszę to zrobić?

1
Nobody 7 kwiecień 2020, 17:33

2 odpowiedzi

Najlepsza odpowiedź

Agregat może być używany do wklejania wierszy o tej samej wartości Num w następujący sposób:

data_aggr <- data.frame(num=c(1,1,1,2,2), letters=letters[1:5])
aggregate(data_aggr$letters, list(data_aggr$num), FUN=paste, collapse= " ")

#   Group.1     x
# 1       1 a b c
# 2       2   d e
1
Miff 7 kwiecień 2020, 14:49

Rozwiązanie DPLER, pomysł jest utworzenie nowej kolumny z numerem wiersza, aby móc przeprowadzić operację w każdym wierszu.

> library(dplyr)
> df.ask <- data.frame('Num' = 1:10, 
+                      'Text' = letters[1:10])
> 
> df.ask %>% 
+   mutate(row_num = row_number()) %>% 
+   group_by(row_num) %>% 
+   mutate(together = paste(Num, Text, collapse = ' ')) %>%
+   ungroup() %>% 
+   select(-row_num)
# A tibble: 10 x 3
     Num Text  together
   <int> <fct> <chr>   
 1     1 a     1 a     
 2     2 b     2 b     
 3     3 c     3 c     
 4     4 d     4 d     
 5     5 e     5 e     
 6     6 f     6 f     
 7     7 g     7 g     
 8     8 h     8 h     
 9     9 i     9 i     
10    10 j     10 j 
0
Kozolovska 7 kwiecień 2020, 14:38