我想創建一個函數,可以應用於數據框中的單個列,每行。更大的數據幀中的數據幀列查找
我想要的功能是將總銷售價值輸入到數據框中,搜索它所處的範圍(在1000個值的數據庫中 - 它有一列minsales,maxsales和佣金),然後退還佣金。
我已經創建了一個工作函數來做到這一點,但是,當我嘗試將其應用於數據框的整個列時,它不適用於每個單獨的行 - 它僅從第一個排成後續行。我總是得到警告「更長的對象長度不是更短的對象長度的倍數」,我假設這是嘗試獲取列值的結果,並嘗試將其與約1000個值的數據庫進行比較。我知道這只是一個警告,但我猜這是我的代碼故障的原因。
到目前爲止,我已經嘗試使用apply
和lapply
作爲網站上其他答案的建議,但我最終得到了「未使用的參數(X [[i]])」(即使我定義了我的其他必需的參數),即使如此,我仍然得到「更長的對象長度不是更短的對象長度的倍數」。
換句話說,我想產生這個(值僅僅是例子)的表:
Sales CommIndexnum(Function applied to entire col) Commission
210000 1 25771
210250 2 25901
211000 3 26031
但是目前我結束了這個和物體長度警告(值僅僅是例子):
Sales CommIndexnum(Function applied to entire col) Commission
25000 1 25771
30000 1 25771(wrong return value)
35000 1 25771(wrong return value)
根問題似乎是查找函數,所以我省略了返回值函數。這是我的主要代碼:
# database call
Database <- read.csv("database.csv")
# lookup function that returns index number of commission
commissionindexnum <- function(totalsales, minv, maxv) {
which(totalsales >= minv & totalsales <= maxv)
}
# test data frame
Employee <-
data.frame(
Name = character(3),
#sales amount used for lookup
TotalSales = c(212000, 209000, 211000),
#index number for the value to be used for commission
CommissionIndexnum = double(3),
#empty vector- lookup return values should go into the commission section
Commission = double(3)
)
# errors appear here (database has ~1000 values- total sales amount would be searched for in it)
Employee[,3] <- commissionindexnum(Employee[,2], Database$Min, Database$Max),
部分數據庫(如CSV):
Min,Max,Commission
209740,210239,25771
210240,210739,25901
210740,211239,26031
211240,211739,26161
211740,212239,26291
212240,212739,26421
我有點困惑,很難確切知道如果沒有可重複的例子,該怎麼做。你能否添加至少一部分數據庫數據框? –
是的,給我們一個可重複的例子,你可能想檢查你的標籤,因爲它不關於閃亮。我想你可能想查找'?地圖' –
更新 - 我查了地圖。如果我正確地理解它 - 它可以採用列表/列,並且如果使用函數將返回相同的值。 – Shan