Rには比較的新しいので、Rのすべてのコードを「ベクトル化」するのには苦労します。観測値を観測値の最小値に設定するR
IDの最小時間となるようにデータフレームに値を設定する必要があります。
ID isTrue RealTime MinTime
1 TRUE 16
1 FALSE 8
1 TRUE 10
2 TRUE 7
2 TRUE 30
3 FALSE 3
に点灯させる:完全に、次の作品
ID isTrue RealTime MinTime
1 TRUE 16 10
1 FALSE 8
1 TRUE 10 10
2 TRUE 7 7
2 TRUE 30 7
3 FALSE 3
。ただし、実行には10分かかりますが、これは理想的ではありません。
for (i in 1:nrow(df)){
if (df[i,'isTrue']) {
prevTime <- sqldf(paste('Select min(MinTime) from dfStageIV where ID =',df[i,'ID'],sep=" "))[1,1]
if (is.na(prevTime) | is.na(df[i,'MinTime']) | df[i,'MinTime'] < prevTime){
df[i,'MinTime']<-dfStageIV[i,'RealTime']
} else {
dfStageIV[i,'MinTime']<-prevTime
}
}
}
どうすればよいですか? forループとdoループをRで使うのは最良の方法ではありません。私はapply()とaggregate.data.frame()関数を見てきましたが、これを行う方法を理解できません。誰かが私を正しい方向に向けることができますか?とても有難い!!
は 'ave'を見てみましょう。 – lmo
ありがとう、最初の試みは近くだった。 df $ MinTime <-ave(df $ RealTime、df $ ID、FUN = min)。しかし、どのように私はそれが本当の真実であるものを取るようになるのですか? – user2535309
df $ MinTime <-ave(df $ RealTime、df $ ID、df $ isTrue、FUN = min) df $ MinTime <-ifelse(df $ isTrue、df $ MinTime、NA)。これは、警告のトンを返しますが、動作します。ありがとう! – user2535309