データフレーム内の1つの列に、各行に対して適用できる関数を作成しようとしています。大きいデータフレームでのデータフレーム列の参照
私は、データフレームに合計売上値を入力し、それが入る範囲を検索します(1000の値のデータベース - minsales、maxsales、およびcommissionの列を持ちます) )、そして手数料を返す。
データフレームの列全体に適用しようとすると、これを実行するための機能が作成されていますが、個々の行では機能しません。行を次の行に移動します。私はいつも "長いオブジェクトの長さは短いオブジェクトの長さの倍数ではない"という警告を受け取ります。これは、列の値を取って、約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