Rのデータフレームの各行で計算を実行し、その計算をフレームの新しい列として追加しようとしています。「by」関数を使い始めましたが、計算が非常に遅いので、代わりに「apply」関数に切り替えました。私が想像する方法は、関数でapplyを実行し、出力を変数に保存し、そのデータを元のデータフレームに追加することです。
保険プランの期間を計算してその値を返す関数を作成しました。これは、サンプルデータセットで正常に機能します。より大きなデータセットを使用すると、「サイズのベクトルを割り当てることができません...」というエラーが発生します。多くの人がRAMを増やすことを勧めていることは知っていますが、私はすでに16GBのメモリを持っており、データセット全体がRにロードされているので、コンピュータは7.7GBのメモリしか使用していないと言っています。データセットには最大1,100万レコードの44列があるので、データの列をもう1つ追加すると8GBのメモリがどのように消費されるのかわかりません。
正しい方向のどのポイントでも素晴らしいでしょう。
以下は私が使用している関数です:
get_term_length <- function(row_data){
# convert values to dates
expiration_date <- as.Date( row_data[42] )
start_date <- as.Date( row_data[43] )
cancellation_date <- as.Date( row_data[44] )
# check to see if the cancellation date is NA - just use entire policy length
if( is.na(cancellation_date) ){
return( expiration_date - start_date) )
}
# check to see if policy was cancelled early
if(cancellation_date < expiration_date){
return( cancellation_date - start_date )
}
# the policy was for the entire term
else{
return( expiration_date - start_date )
}
}
私は次のように呼び出して関数を実行しています:
tmp <- apply(policy_data, 1, get_term_length)