簡體   English   中英

R dplyr 錯誤 mutate 出現問題 - 嘗試按兩列分組並用百分比改變新列

[英]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_qtysum(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有問題。 ✖ 參數的無效“類型”(列表)ℹ 輸入totalsum(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM