0

このようなデータがあれば。

 1  A   02-01-2015 08:08:00 

 1  B   02-01-2015 08:11:00 

 1  C   02-01-2015 08:12:00 

 1  D   02-01-2015 08:16:00 

 2  A   02-01-2015 09:08:00 

 2  B   02-01-2015 09:11:00 

 2  C   02-01-2015 09:13:00 

 2  D   02-01-2015 09:19:00

グループ内の各行の時間差を取得したい。このような結果を期待しています

 1  B   3:00

 1  C   1:00

 1  D   4:00

 2  B   3:00

 2  C   2:00

 2  D   6:00
4

1 に答える 1

1

Plyr も同様に機能する可能性がありますが、ベース R を使用すると、いくつかの tapply が機能します。

日付の代わりに数値を使用してデータを再作成します。

x <- data.frame(groups = c(1,1,1,1,2,2,2,2),id = rep(LETTERS[1:4],2),data = c(1,3,4,7,2,7,15,24),stringsAsFactors = F)

相違点と適切な ID を見つけます。

data.frame(groups = unlist(tapply(x$groups,INDEX = x$groups,FUN = function(x){x[-1]})),
       id = unlist(tapply(x$id,INDEX = x$groups,FUN = function(x){x[-1]})),
       difference = unlist(tapply(x$data,INDEX = x$groups,FUN = diff)))

差を計算するには、日付に別の関数が必要になる場合があります。日付がどの形式で保存されているかわかりません。また、データを再作成するのが面倒です。

データのフォーマットが統一されていることがわかっている場合は、次のようにするとパフォーマンスが向上する可能性があります。

x$diff <- c(0,diff(x$data))
x[x$id != 'A', ]
于 2015-07-23T18:48:46.053 に答える