2

個人IDでデータフレームのサブセットを取得し、比較のためにEXAMDATE変数を1つ遅らせるforループを作成しようとしています。したがって、特定の行には元の EXAMDATE と、その 1 行前の EXAMDATE の値を含む変数 EXAMDATE_LAG があります。

for (i in length(uniquerid))
{
    temp <- subset(part2test, RID==uniquerid[i])
    temp$EXAMDATE_LAG <- temp$EXAMDATE
    temp2 <- data.frame(lag(temp, -1, na.pad=TRUE))  
    temp3 <- data.frame(cbind(temp,temp2))
}

新しい変数を問題なく作成しているようですが、手順が不足しているため、ラグが適切に機能しないことがわかっています。おそらく、ラグ関数の使用方法に関する他の人々の例も誤解していますか?

4

1 に答える 1

1

これに完全に答えることができるように。コードにはいくつかの問題があります。ルカイノは一つ指摘した。ループのたびにtemp、 、temp2、およびtemp3(または古いものを上書きします) を作成します。したがって、ループを最後に実行したときの出力のみが残ります。

ただし、これはループが必要なものではありません。代わりに、ベクトル化された性質を利用できますR

x <- 1:10

> c(x[-1], NA)
 [1]  2  3  4  5  6  7  8  9 10 NA

したがって、その概念をplyrデータをうまく分割するようなライブラリと組み合わせると、実行可能なソリューションが得られるはずです。私が何かを見逃した場合、またはこれで問題が解決しない場合は、再現可能な例を提供してください。

library(plyr)
myLag <- function(x) {
  c(x[-1], NA)
}

ddply(part2test, .(uniquerid), transform, EXAMDATE_LAG=myLag(EXAMDATE))

ベース R を使用してsplit、またはその引数data.tableを使用してパッケージでこれを行うこともできます。by=

于 2012-09-14T20:16:21.993 に答える