我想创建一个函数,可以应用于数据框中的单个列,每行。更大的数据帧中的数据帧列查找
我想要的功能是将总销售价值输入到数据框中,搜索它所处的范围(在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