我有一個名為 2022_Rev 的資料框,看起來像這樣:
Name Vendor Sales
Steve 6 80,000
Annie 4 95,000
Bill 6 45,000
Steve 3 25,000
Bill 2 40,000
Sam 5 5,000
... ... ...
我還有每個銷售人員的名單:
Employees ['Steve', 'Annie', 'Bill', 'Sam', ...]
我想將 mean() 應用于串列“Employee”中每個專案的列銷售額。我應該使用base R來創建一個回圈,遍歷“Employees”中的每個值,然后創建一個向量來顯示每個員工的平均值。到目前為止,我有:
avgSales = rep(NA, 10)
for (i in length(Employees)){
if(Employees[i] == 2022_Rev$Name){
avgSales[i] = mean(2022_Rev$Sales[i])
}
}
這顯然是錯誤的,因為 if 只能檢查一個值?我不知道如何解決它。
uj5u.com熱心網友回復:
這通常不是我們在 R 中采用的方法(即有更好的方法來逐組獲取列的平均值)。但是,如果您想要一個針對串列中員工姓名的 for 回圈示例,這里是一種基本的 R 方法。首先預先分配一個長度與您的員工一樣長的命名向量,然后使用 for 回圈填充它:
sales_means = setNames(vector("numeric", length = length(Employees)), Employees)
for(e in Employees) {
sales_means[e] = mean(`2022_Rev`[`2022_Rev`$Name==e, "Sales"],na.rm=T)
}
輸出:
Steve Annie Bill Sam
52500 95000 42500 5000
輸入:
`2022_Rev` = structure(list(Name = c("Steve", "Annie", "Bill", "Steve", "Bill",
"Sam"), Vendor = c(6L, 4L, 6L, 3L, 2L, 5L), Sales = c(80000L,
95000L, 45000L, 25000L, 40000L, 5000L)), row.names = c(NA, -6L
), class = "data.frame")
Employees = list('Steve', 'Annie', 'Bill', 'Sam')
uj5u.com熱心網友回復:
我們可以使用from中的subset
選項aggregate
base R
aggregate(Sales ~ Name, data = `2022_Rev`, subset = Name %in% Employees, mean)
Name Sales
1 Annie 95000
2 Bill 42500
3 Sam 5000
4 Steve 52500
uj5u.com熱心網友回復:
我們可以aggregate
用來計算Sales
相對于的平均值Name
,然后將您的串列轉換Employees
為 data.frame,然后將其與aggregate
結果合并以獲取串列中的值
aggregate(Sales ~ Name , `2022_Rev` , mean) |>
merge(do.call(rbind , Employees) |>
data.frame(Name = _) , by.y = "Name")
- 輸出
Name Sales
1 Annie 95000
2 Bill 42500
3 Sam 5000
4 Steve 52500
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/504632.html