Jak łączyć wiersze z tymi samymi wartościami kolumn w r


Możesz użyć następującej podstawowej składni, aby połączyć wiersze z tymi samymi wartościami kolumn w ramce danych w R:

 library (dplyr)

df %>%
  group_by(group_var1, group_var2) %>%
  summarise(across(c(values_var1, values_var2), sum))

Poniższy przykład pokazuje, jak zastosować tę składnię w praktyce.

Przykład: Połącz wiersze o tych samych wartościach kolumn w R

Załóżmy, że mamy następującą ramkę danych zawierającą informacje o sprzedaży i zwrotach dokonanych przez różnych pracowników firmy:

 #create data frame
df <- data. frame (id=c(101, 101, 102, 103, 103, 103),
                 employee=c('Dan', 'Dan', 'Rick', 'Ken', 'Ken', 'Ken'),
                 sales=c(4, 1, 3, 2, 5, 3),
                 returns=c(1, 2, 2, 1, 3, 2))

#view data frame
df

   id employee sales returns
1 101 Dan 4 1
2 101 Dan 1 2
3 102 Rick 3 2
4 103 Ken 2 1
5 103 Ken 5 3
6 103 Ken 3 2

Możemy użyć poniższej składni, aby połączyć wiersze, które mają tę samą wartość w kolumnach id i Employee , a następnie zagregować pozostałe kolumny:

 library (dplyr)

#combine rows with same value for id and employee and aggregate remaining columns
df %>%
  group_by(id, employee) %>%
  summarise(across(c(sales, returns), sum))

# A tibble: 3 x 4
#Groups: id[3]
     id employee sales returns
          
1 101 Dan 5 3
2 102 Rick 3 2
3 103 Ken 10 6

Rezultatem jest ramka danych, która łączy wszystkie wiersze oryginalnej ramki danych, które miały tę samą wartość w kolumnach ID i Pracownik , a następnie oblicza sumę wartości w kolumnach Sprzedaż i Zwroty .

Uwaga : zdecydowaliśmy się na agregację kolumn sprzedaży i zwrotów za pomocą funkcji sumy , ale jeśli chcesz, możesz agregować według innego wskaźnika, np. średniej .

Powiązane: Jak używać funkcjicross() w dplyr

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w języku R:

Jak łączyć listy w R
Jak połączyć dwa wektory w R
Jak połączyć dwie ramki danych w R z różnymi kolumnami

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *