mam dwie ramki danych, jeden dla sklepu i jeden do sprzedaży:Wewnętrzna przyłączenia dwóch ramek danych nadal pokazuje wszystkie wartości
store <- data.frame(StoreID=c(1,2,3,4), StoreName=c("McDonalds", "A&W", "Burger King", "Wendy's"))
sales <- data.frame(StoreID=c(1,2,1,1,2,2), ItemID=c(2,2,3,4,4,5), SalesQty=c(10,20,30,40,50,60))
store
#StoreID StoreName
# 1 McDonalds
# 2 A&W
# 3 Burger King
# 4 Wendy's
sales
#StoreID ItemID SalesQty
# 1 2 10
# 2 2 20
# 1 3 30
# 1 4 40
# 2 4 50
# 2 5 60
Chcę je połączyć, tak że widzę StoreName dla każdej transakcji sprzedaży :
merged <- merge(sales, store, by = "StoreID")
merged
#StoreID ItemID SalesQty StoreName
# 1 2 10 McDonalds
# 1 3 30 McDonalds
# 1 4 40 McDonalds
# 2 2 20 A&W
# 2 4 50 A&W
# 2 5 60 A&W
teraz chcę wiedzieć dla każdego połączonego StoreName w ramce danych, jak wiele różnych rzeczy zostały sprzedane:
tapply(merged$ItemID, merged$StoreName, FUN = function(x) length(unique(x)))
#A&W Burger King McDonalds Wendy's
# 3 NA 3 NA
Moje pytanie brzmi: dlaczego wynik testu pokazuje "Burger King" i "Wendy's", mimo że nie znajdują się w scalonej ramce danych?
są 'Czynników, więc poziom nadal istnieją – SymbolixAU
jeśli się znaki wartości przechodząc' data.frame (StoreID = ..., ..., stringsAsFactors = F) 'podczas tworzenia ramek danych, nie zobaczysz ich na wyjściu. – SymbolixAU
'droplevels' to sposób na pozbycie się niewykorzystanych poziomów czynników, np. 'with (droplevels (merged), tapply (ItemID, StoreName, FUN = funkcja (x) length (unique (x)))) –