0

以前にこの質問をしたところ、解決する回答がありました。次のようなデータフレームがあります。

id                              weekdays              halflife
241732222300860000  Friday, Aug 31, 2012, 22    0.4166666667
241689170123309000  Friday, Aug 31, 2012, 19    0.3833333333
241686878137512000  Friday, Aug 31, 2012, 19    0.4
241651117396738000  Friday, Aug 31, 2012, 16    1.5666666667
241635163505820000  Friday, Aug 31, 2012, 15    0.95
241633401382265000  Friday, Aug 31, 2012, 15    2.3666666667

そして、月曜日、次に火曜日に作成されたアイテムの平均半減期を取得したいと思います...など。(私の日付範囲は 6 か月以上です)。

私が使用した日付値を取得するにはstrptimedifftime. また、 で最大の半減期を見つけましたmax(df$halflife)。対応する ID を見つけるにはどうすればよいですか?

再現可能なコード:

structure(list(id = c(241732222300860416, 241689170123309056, 
241686878137511936, 241651117396738048, 241635163505819648, 241633401382264832
), weekdays = c("Friday, Aug 31, 2012, 22", "Friday, Aug 31, 2012, 19", 
"Friday, Aug 31, 2012, 19", "Friday, Aug 31, 2012, 16", "Friday, Aug 31, 2012, 15", 
"Friday, Aug 31, 2012, 15"), halflife = structure(c(0.416666666666667, 
0.383333333333333, 0.4, 1.56666666666667, 0.95, 2.36666666666667
), class = "difftime", units = "mins")), .Names = c("id", 
"weekdays", "halflife"), row.names = c(NA, 6L), class = "data.frame")

だから今、私はすべての月曜日、火曜日などの平均半減期値を持っています. これらの平日のすべての時間の平均値を取得するにはどうすればよいですか。つまり、月曜日の午前 9 時、午前 10 時、午前 11 時に作成されたすべてのアイテムの平均半減期などです。そして、火曜日の午前 9 時、午前 10 時、午前 11 時など。曜日列の日付は、コンマの後の最後の数字が作成された時間になるようにフォーマットされています。私は正規表現とパターン マッチングがとても苦手なので、このフォローアップの質問をしています。

4

1 に答える 1

1

基本パッケージを使用すると、次のことができます。

> mydf
            id                 weekdays       halflife
1 2.417322e+17 Friday, Aug 31, 2012, 22 0.4166667 mins
2 2.416892e+17 Friday, Aug 31, 2012, 19 0.3833333 mins
3 2.416869e+17 Friday, Aug 31, 2012, 19 0.4000000 mins
4 2.416511e+17 Friday, Aug 31, 2012, 16 1.5666667 mins
5 2.416352e+17 Friday, Aug 31, 2012, 15 0.9500000 mins
6 2.416334e+17 Friday, Aug 31, 2012, 15 2.3666667 mins

正規表現を使用する代わりに、のstrsplit各要素、結果、およびそれを として 4 列形式に戻し、 を使用しweekdaysて戻すunlistことができます。matrixcbindmydf

> mydf2 <- cbind(mydf, matrix(unlist(sapply(mydf$weekdays, strsplit, split=',')), byrow=TRUE, ncol=4, dimnames=list(1:nrow(mydf), c('Weekday', 'Day', 'Year', 'Hour'))))
> mydf2
            id                 weekdays       halflife Weekday     Day  Year Hour
1 2.417322e+17 Friday, Aug 31, 2012, 22 0.4166667 mins  Friday  Aug 31  2012   22
2 2.416892e+17 Friday, Aug 31, 2012, 19 0.3833333 mins  Friday  Aug 31  2012   19
3 2.416869e+17 Friday, Aug 31, 2012, 19 0.4000000 mins  Friday  Aug 31  2012   19
4 2.416511e+17 Friday, Aug 31, 2012, 16 1.5666667 mins  Friday  Aug 31  2012   16
5 2.416352e+17 Friday, Aug 31, 2012, 15 0.9500000 mins  Friday  Aug 31  2012   15
6 2.416334e+17 Friday, Aug 31, 2012, 15 2.3666667 mins  Friday  Aug 31  2012   15

平日の列を適切に分割したので、aggregate関数を使用meanして目的のグループ化列を計算できます。

> aggregate(halflife ~ Weekday, data=mydf2, FUN = mean)
  Weekday  halflife
1  Friday 1.013889 

その後でグループ化Weekdayしたい場合Hour

> aggregate(halflife ~ Weekday + Hour, data=mydf2, FUN = mean)
  Weekday Hour   halflife
1  Friday   15 1.6583333 
2  Friday   16 1.5666667 
3  Friday   19 0.3916667 
4  Friday   22 0.4166667 

ここでの関数の最初のパラメーターはaggregate、1 ~ 1、1 ~ 多数、多数 ~ 1、および多数 ~ 多数の関係をサポートするフォーラム オブジェクトです。例を参照?aggregateして、使用方法を理解してください。

多対多の関係の簡単な例を挙げます。

> set.seed(12345)
> mydf2 <- cbind(mydf2, newvar = rnorm(nrow(mydf2)))
> mydf2
            id                 weekdays       halflife Weekday     Day  Year Hour     newvar
1 2.417322e+17 Friday, Aug 31, 2012, 22 0.4166667 mins  Friday  Aug 31  2012   22  0.5855288
2 2.416892e+17 Friday, Aug 31, 2012, 19 0.3833333 mins  Friday  Aug 31  2012   19  0.7094660
3 2.416869e+17 Friday, Aug 31, 2012, 19 0.4000000 mins  Friday  Aug 31  2012   19 -0.1093033
4 2.416511e+17 Friday, Aug 31, 2012, 16 1.5666667 mins  Friday  Aug 31  2012   16 -0.4534972
5 2.416352e+17 Friday, Aug 31, 2012, 15 0.9500000 mins  Friday  Aug 31  2012   15  0.6058875
6 2.416334e+17 Friday, Aug 31, 2012, 15 2.3666667 mins  Friday  Aug 31  2012   15 -1.8179560
> aggregate(cbind(newvar,halflife) ~ Weekday + Hour, data=mydf2, FUN = mean)
  Weekday Hour     newvar  halflife
1  Friday   15 -0.6060343 1.6583333
2  Friday   16 -0.4534972 1.5666667
3  Friday   19  0.3000814 0.3916667
4  Friday   22  0.5855288 0.4166667
于 2013-02-21T11:21:18.243 に答える