[英]R dplyr error Problem with mutate - Trying to group by two columns and mutate new column with a percentage
我正在嘗試創建一個 geom_col 來查看平均值。 按類別 + 性別的銷售率。 為此,我嘗試首先按類別和性別分組,然后通過 Summarize 保存兩個變量,然后在變異 function 中創建一個新列,我想在我的 ggplot 中使用它(Geom_col 用於 CATEGORY,facet wrap 用於 Gender)
這是我的錯誤:錯誤: summarise()
輸入total_qty
問題。 x 參數 i 的無效“類型”(列表)輸入total_qty
為sum(qty_sold)
。
編輯:將示例數據添加為 img。 [![在此處輸入圖像描述][1]][1]
任何人都可以幫助解決這個問題,請。
enter code here
data %>%
group_by(CATEGORY, Gender) %>%
summarise(total_qty = sum(qty_sold)) %>%
summarise(total_qty_avail = sum(`Qty Received`)) %>%
ungroup %>%
mutate(sell_rate=total_qty/total_qty_avail)%>%
ggplot(data=data,aes(x=CATEGORY,y=sell_rate))+
geom_col() +
facet_wrap(~Gender)
輸出結構
structure(list(CATEGORY = c("A", "A", "B"), Gender = c("M", "F",
"M"), `Qty Received` = c(100, 150, 50), qty_sold = c(10, 20,
5)), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"
))
在第一個summarise
語句之后,唯一可用的列是分組列和“total_qty”。 如果我們需要創建“total_qty_avail”,請在第一個summarise
中進行
library(dplyr)
data %>%
group_by(CATEGORY, Gender) %>%
summarise(total_qty = sum(qty_sold, na.rm = TRUE),
total_qty_avail = sum(`Qty Received`, na.rm = TRUE), .groups = 'drop')
如果 OP 想要創建僅按 'CATEGORY' 分組的 'total_qty_avail'(假設 OP 知道summarise
刪除最后一個分組列,則改為按 'CATEGORY' 進行分組,然后使用sum
進行第二次分組的“收到的數量”和“性別”添加為新的分組列
data %>%
group_by(CATEGORY) %>%
group_by(total_qty_avail = sum(`Qty Received`, na.rm = TRUE),
Gender, .add = TRUE) %>%
summarise(total_qty = sum(qty_sold, na.rm = TRUE), .groups = 'drop')
關於具體錯誤,可能是因為summarise
d 列是list
,例如,如果我們使用iris
創建一個list
列並按匯總進行分組,它會返回相同的錯誤
iris %>%
mutate(Sepal.Length = list(Sepal.Length)) %>%
group_by(Species) %>%
summarise(total = sum(Sepal.Length))
錯誤:
summarise()
輸入total
有問題。 ✖ 參數的無效“類型”(列表)ℹ 輸入total
為sum(Sepal.Length)
。 ℹ 錯誤發生在第 1 組:Species = "setosa"。 運行rlang::last_error()
以查看錯誤發生的位置。
一個選項是將列表列unlist
列出為vector
data %>%
mutate(qty_sold = unlist(qty_sold)) %>%
group_by(CATEGORY, Gender) %>%
summarise(total_qty = sum(qty_sold, na.rm = TRUE),
total_qty_avail = sum(`Qty Received`, na.rm = TRUE), .groups = 'drop')
ggplot
調用中還有另一個問題。 由於它已經在鏈中( %>%
),因此data
將是.
而不是原始data
(也不需要 data 參數)
data %>%
group_by(CATEGORY, Gender) %>%
summarise(total_qty = sum(qty_sold, na.rm = TRUE),
total_qty_avail = sum(`Qty Received`, na.rm = TRUE),
.groups = 'drop') %>%
mutate(sell_rate=total_qty/total_qty_avail) %>%
ggplot(data=., aes(x = CATEGORY, y = sell_rate)) +
geom_col() +
facet_wrap(~Gender)
-輸出
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.