0

よろしくお願いします。私はRを使用しており、次の形式のデータテーブル(または最終的にはzooの時系列)があるとしましょう。

Col1: time   Values
Day1 H1      Value
Day1 H2      Value
Day1 H3      Value
Day1 H4      Value

Day2 H1      Value
Day2 H2      Value
Day2 H3      Value
Day2 H4      Value

Day3 H1      Value
...

次の形式で行列を作成したいとします。Rows:Days

    H1       H2       H3       H4
D1  Values   Values   Values   Values
D2  Values   Values   Values   Values
D3  Values   Values   Values   Values

そしてまた:

    average(H1,H2)       average(H3,H4)
D1  Values               Vales
D2  Values               Vales
D3  Values               Vales

C ++などの一部の言語では、おそらく「for」を2つ使用して続行しますが、ここで続行するのに最適な方法かどうかはわかりません。どうもありがとうございました。私はRを初めて使用し、さまざまなロジックにかなり迷っています(ただし、非常に興味深いロジックです)。

このトピックに関する他の質問を見たことがありますが、まったくわかりません。

4

3 に答える 3

5

これは、いくつかの基本的なreshape作業で、aggregate()またはwithin()手段のために行うことができます:

まず、いくつかのサンプルデータが非常に役立ちます。

set.seed(1)
temp <- data.frame(Col1 = paste("Day", rep(1:4, each = 4), sep=""),
                   times = paste("H", rep(1:4, times = 4), sep=""),
                   Values = runif(16, min=0, max=10))
temp
#    Col1 times    Values
# 1  Day1    H1 2.6550866
# 2  Day1    H2 3.7212390
# 3  Day1    H3 5.7285336
# 4  Day1    H4 9.0820779
# 5  Day2    H1 2.0168193
# 6  Day2    H2 8.9838968
# 7  Day2    H3 9.4467527
# 8  Day2    H4 6.6079779
# 9  Day3    H1 6.2911404
# 10 Day3    H2 0.6178627
# 11 Day3    H3 2.0597457
# 12 Day3    H4 1.7655675
# 13 Day4    H1 6.8702285
# 14 Day4    H2 3.8410372
# 15 Day4    H3 7.6984142
# 16 Day4    H4 4.9769924

次に、reshapeロングフォーマットからワイドフォーマットに移行するために使用します

tempwide <- reshape(temp, direction = "wide", idvar="Col1", timevar="times")
tempwide
#    Col1 Values.H1 Values.H2 Values.H3 Values.H4
# 1  Day1  2.655087 3.7212390  5.728534  9.082078
# 5  Day2  2.016819 8.9838968  9.446753  6.607978
# 9  Day3  6.291140 0.6178627  2.059746  1.765568
# 13 Day4  6.870228 3.8410372  7.698414  4.976992

第三に、rowMeans列の目的のサブセットで使用します。必要に応じて使用することもできaggregateますが、これは元のを変換するための便利な方法data.frameです。

tempwide <- within(tempwide, {
  mean.H1H2 <- rowMeans(tempwide[2:3])
  mean.H3H4 <- rowMeans(tempwide[4:5])
})
tempwide
#    Col1 Values.H1 Values.H2 Values.H3 Values.H4 mean.H3H4 mean.H1H2
# 1  Day1  2.655087 3.7212390  5.728534  9.082078  7.405306  3.188163
# 5  Day2  2.016819 8.9838968  9.446753  6.607978  8.027365  5.500358
# 9  Day3  6.291140 0.6178627  2.059746  1.765568  1.912657  3.454502
# 13 Day4  6.870228 3.8410372  7.698414  4.976992  6.337703  5.355633
于 2012-12-14T10:24:47.210 に答える
1

これを行うには確かに多くの方法があります。data.tableパッケージを集約に使用できます。なぜ使用するのdata.tableですか?高速です(ここを参照

Ananda Mahtoの答えを利用して、そのtempwide時点でステップオフし、を作成しtemp wide.tableます。

require(data.table)
set.seed(1)
temp <- data.frame(Col1 = paste("Day", rep(1:4, each = 4), sep=""),
                   times = paste("H", rep(1:4, times = 4), sep=""),
                   Values = runif(16, min=0, max=10))

tempwide <- reshape(temp, direction = "wide", idvar="Col1", timevar="times")

tempwide.table <- data.table(tempwide)

tempwide.table[, H1n2 := sum(Values.H1, Values.H2)/2, by=Col1]
tempwide.table[, H3n4 := sum(Values.H3, Values.H4)/2, by=Col1]

したがって、印刷すると次のようになりtempwide.tableます。

   Col1 Values.H1 Values.H2 Values.H3 Values.H4     H1n2     H3n4
1: Day1  7.176185  9.919061 3.8003518  7.774452 8.547623 5.787402
2: Day2  9.347052  2.121425 6.5167377  1.255551 5.734239 3.886144
3: Day3  2.672207  3.861141 0.1339033  3.823880 3.266674 1.978891
4: Day4  8.696908  3.403490 4.8208012  5.995658 6.050199 5.408230

構文は柔軟であり、多くの列の意味では、おそらく次のようなものが必要になります。

tempwide.table[, list(mean(sum(Values.H1, Values.H2)/2)), by=Col1]
于 2012-12-14T19:20:07.527 に答える
1

これを試してください(ファイルからのものであり、日が文字通りではない場合など、適切な変更を加えてDay1):

Lines <- "Col1 times    Values
Day1    H1 2.6550866
Day1    H2 3.7212390
Day1    H3 5.7285336
Day1    H4 9.0820779
Day2    H1 2.0168193
Day2    H2 8.9838968
Day2    H3 9.4467527
Day2    H4 6.6079779
Day3    H1 6.2911404
Day3    H2 0.6178627
Day3    H3 2.0597457
Day3    H4 1.7655675
Day4    H1 6.8702285
Day4    H2 3.8410372
Day4    H3 7.6984142
Day4    H4 4.9769924"

library(zoo)
z <- read.zoo(text = Lines, header = TRUE, index = 1, split = 2, FUN = identity)

結果は次のとおりです。

> z
           H1        H2       H3       H4
Day1 2.655087 3.7212390 5.728534 9.082078
Day2 2.016819 8.9838968 9.446753 6.607978
Day3 6.291140 0.6178627 2.059746 1.765567
Day4 6.870228 3.8410372 7.698414 4.976992

詳細については?read.zoo、およびvignette("zoo-read")を参照してください。

于 2012-12-14T23:02:46.327 に答える