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