私は車両用のETAを含むデータフレームを持っています。データには1つの(実際の)到着のETAが多数含まれており、1つの到着に対応する必要があるETAをグループ化したいと考えています。私はこのクラスタリングを行い、カスタム関数を書いたグループ化されたデータフレームでクラスタリング機能をループすることができますか?
vehicle eta ... cluster
--------- ------------ ----- ---------
car_1 01-11-2017 ... 1
car_1 02-11-2017 ... 1
car_1 15-11-2017 ... 2
horse_3 05-11-2017 ... 1
horse_3 12-11-2017 ... 2
horse_3 13-11-2017 ... 2
:
私のデータは私の望ましい結果としてcluster
で、次のようになります。関数の入力は1台の車両の行で、クラスタインデックスの配列を返します。たとえば、私のサンプルデータの行1~3を渡すと、c(1,1,2)
が出力されます。だから、私がする必要があるのは、データセット内のすべての車両をサイクルして機能を適用することだけです。しかし、それは私が立ち往生しているところです。
cluster_etas
で
、私はこれを行うことができます知っている:
# Initialize an empty column
data$cluster <- 0
# Loop over all vehicles and perform clustering
for (i in unique(data$vehicle)) {
filter_vector <- data$vehicle == i
data$cluster[filter_vector] <- cluster_etas(data[filter_vector,])
}
しかし、私は、充填機能のapply
-kindとこのようになり、よりスマートな解決策がある疑いがあります空白:
data$cluster <- _____(data = data, by = vehicle, function = cluster_etas)
この種の操作を実行する機能はありますか?それはどうなりますか?
私には「tapply」のように見えます。 – lmo
私が見る限り、 'tapply'は原子ベクトルだけを入力として受け取ります。実際には、行全体をクラスタリング関数に渡す必要があります。 –
split + lapply?パッケージに公開されている場合は、dplyrのgroup_byまたはdata.tableです。もう一つのオプションは '?by'でしょう –