Jak naprawić w r: brak funkcji agregującej, domyślnie „długość”


Błąd, który możesz napotkać podczas korzystania z R, to:

 Aggregation function missing: defaulting to length

Ten błąd występuje, gdy używasz funkcji dcast w pakiecie reshape2 do konwersji ramki danych z formatu długiego na format szeroki , ale w poszczególnych komórkach szerokiej ramki danych można umieścić wiele wartości.

Poniższy przykład pokazuje, jak w praktyce skorygować ten błąd.

Jak odtworzyć błąd

Załóżmy, że mamy w R następującą ramkę danych zawierającą informacje o sprzedaży różnych produktów:

 #create data frame
df <- data. frame (store=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
                 promotion=c('Y', 'Y', 'N', 'N', 'Y', 'Y', 'N', 'N'),
                 product=c(1, 2, 1, 2, 1, 2, 1, 2),
                 sales=c(12, 18, 29, 20, 30, 11, 15, 22))

#view data frame
df

  store promotion product sales
1 AY 1 12
2 AY 2 18
3 YEAR 1 29
4 YEAR 2 20
5 BY 1 30
6 BY 2 11
7 BN 1 15
8 BN 2 22

Załóżmy teraz, że spróbujemy użyć funkcji dcast do konwersji ramki danych z formatu długiego na format szeroki:

 library (reshape2)

#convert data frame to wide format
df_wide <- dcast(df, store ~ product, value. var = " sales ")

#view result
df_wide

Aggregation function missing: defaulting to length
  store 1 2
1 to 2 2
2 B 2 2

Należy pamiętać, że funkcja dcast działa, ale pojawia się komunikat ostrzegawczy Brak funkcji agregującej .

Jak naprawić błąd

Powodem, dla którego otrzymujemy ostrzeżenie, jest to, że dla każdej kombinacji sklepu i produktu istnieją dwie potencjalne wartości, które możemy wykorzystać w sprzedaży .

Na przykład dla sklepu A i produktu 1 wartość sprzedaży może wynosić 12 lub 29.

Zatem funkcja dcast domyślnie przyjmuje „długość” jako funkcję agregującą.

Na przykład duża baza danych mówi nam, że dla sklepu A i produktu 1 istnieją łącznie 2 wartości sprzedaży.

Jeśli zamiast tego chcesz użyć innej funkcji agregującej, możesz użyć fun.aggregate .

Na przykład możemy użyć następującej składni, aby obliczyć sumę sprzedaży według sklepu i produktu :

 library (reshape2)

#convert data frame to wide format
df_wide <- dcast(df, store ~ product, value. var = " sales ", fun. aggregate =sum)

#view result
df_wide

  store 1 2
1 A 41 38
2 B 45 33

Oto jak interpretować wartości w dużej ramce danych:

  • Suma sprzedaży sklepu A i produktu 1 wynosi 41 .
  • Suma sprzedaży sklepu A i produktu 2 wynosi 38 .
  • Suma sprzedaży sklepu B i produktu 1 wynosi 45 .
  • Suma sprzedaży sklepu B i produktu 2 wynosi 33 .

Zauważ, że tym razem nie otrzymaliśmy żadnych komunikatów ostrzegawczych, ponieważ użyliśmy argumentu fun.aggregate .

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak naprawić inne typowe błędy w R:

Jak naprawić w R: nieoczekiwana stała łańcuchowa
Jak naprawić w R: Nieprawidłowa formuła szablonu w ExtractVars
Jak naprawić w R: argument nie jest ani numeryczny, ani logiczny: return na

Dodaj komentarz

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