5

だからここに私がやろうとしていることがあります。すべての結果が 1 つの列にリストされているデータ セットがありますが、それらが観察されたステップとそれらを観察するために使用された方法は別の列にあります。一意の識別子として扱っているサイトが複数あります。すべてのサイトに同じ数のステップまたは方法があるわけではなく、すべての方法がすべてのステップで実行されるわけではありません。たとえば、サイト a1 は各ステップでステップ s1 ~ s5 およびメソッド m1 ~ m25 を持ち、サイト a9 はステップ s1 ~ s15 を持ちますが、メソッド m3 ~ m9 のみを持ちます。基本的に、特定のサイト/ステップ/メソッドのデータが欠落している可能性があります。すべてのサイトにすべてのステップがあるわけではなく、すべてのステップにすべての方法があるわけではありません。生データセットは次のようになります。

site step   method  outcome
a1   S 1    m1      5
a1   S 1    m2      1
a1   S 2    m6      4
a2   S 1    m6      1a
a2   S 1    m4      3
a2   S 3    m7      2
a2   S 4    m2      7
a3   S 1    m1      2a
a3   S 1    m2      c11
a4   S 1    m4      2
a4   S 2    m2      5
a5   S 3    m3      6
a6   S 2    m1      7   
a6   S 3    m4      8   

メソッドに応じて、結果にはいくつかの数値と文字の値があります

ステップは唯一の実際の「時間」変数ですが、メソッドも同様に扱う必要があると感じています。現在のデータには多くの行といくつかの列があり、データの設定方法では分析を実行するのに問題があります。

私は次のようにreshapeを使用しました(他のreshapeステートメントを試しましたが、これはたとえば1つです)、残念ながら2つの時間変数を使用できません

    mydata<-reshape(rawdata,idvar="site",timevar="step",direction="wide")


  site method.S 1 outcome.S 1 method.S 2 outcome.S 2 method.S 3 outcome.S 3
1    a1         m1           5         m6           4       <NA>          NA
4    a2         m6           1       <NA>          NA         m7           2
8    a3         m1           2       <NA>          NA       <NA>          NA
10   a4         m4           2         m2           5       <NA>          NA
12   a5       <NA>          NA       <NA>          NA         m3           6
13   a6       <NA>          NA         m1           7         m4           8
   method.S 4 outcome.S 4
1        <NA>          NA
4          m2           7
8        <NA>          NA
10       <NA>          NA
12       <NA>          NA
13       <NA>          NA

これはrからの出力です

サイトごとに 1 つの行と多くの列 (サイトが特定のステップで何も行われていなくても) で終了したいのは正しいことです。私はサイトごとに1行を取得しようとしていますが、結果列はすべての値が適切な列の下に表示されなくなります

site  S1.m1.outcome S1.m2.outcome S1.m3.outcome ................ S9.m10.outcome
a1        1               c4.5           NA                         3.6

したがって、基本的にはステップとメソッドの組み合わせごとに 1 つの列であり、それが多数の列であることはわかっていますが、これにより、ステップ間の比較がはるかに簡単になります。これは私の目標の 1 つであり、これを行う主なポイントは、与えられた方法で、t 検定などを使用してステップ間の結果の変化を検定し、平均値の違いを調べます。テストを行うためのより簡単な方法があると思いますが、私はまだ r に慣れておらず、まだ見つけていません。アドバイスありがとうございます

4

2 に答える 2

7

希望する出力を正しく理解している場合、ここに 2 つのオプションがあります。data.frame以下の例では、最後の手順で、各出力を使用して一致するように列を並べ替えました。同じ結果が得られます。つまり、実際のニーズに応じて「T2」と「T3」で停止できるはずです。残りはデモンストレーション用です。

オプション 1: reshape2 回

T1 <- reshape(rawdata, idvar = c("site", "method"),
              timevar = "step", direction = "wide")
T2 <- reshape(T1, direction = "wide", idvar = "site", timevar = "method")
dim(T2)
# [1]  6 25
names(T2)
#  [1] "site"          "outcome.S1.m1" "outcome.S2.m1" "outcome.S3.m1" "outcome.S4.m1"
#  [6] "outcome.S1.m2" "outcome.S2.m2" "outcome.S3.m2" "outcome.S4.m2" "outcome.S1.m6"
# [11] "outcome.S2.m6" "outcome.S3.m6" "outcome.S4.m6" "outcome.S1.m4" "outcome.S2.m4"
# [16] "outcome.S3.m4" "outcome.S4.m4" "outcome.S1.m7" "outcome.S2.m7" "outcome.S3.m7"
# [21] "outcome.S4.m7" "outcome.S1.m3" "outcome.S2.m3" "outcome.S3.m3" "outcome.S4.m3"
T2a <- T2[, order(names(T2))]
T2a[, c(1:3, 23:25)]
#    outcome.S1.m1 outcome.S1.m2 outcome.S1.m3 outcome.S4.m6 outcome.S4.m7 site
# 1              5             1          <NA>          <NA>          <NA>   a1
# 4           <NA>          <NA>          <NA>          <NA>          <NA>   a2
# 8             2a           c11          <NA>          <NA>          <NA>   a3
# 10          <NA>          <NA>          <NA>          <NA>          <NA>   a4
# 12          <NA>          <NA>          <NA>          <NA>          <NA>   a5
# 13          <NA>          <NA>          <NA>          <NA>          <NA>   a6

オプション 2: dcast「reshape2」から使用

library(reshape2)
T3 <- dcast(rawdata, site ~ step + method, value.var = "outcome", drop = FALSE)
dim(T3)
# [1]  6 25
names(T3)
#  [1] "site"  "S1_m1" "S1_m2" "S1_m3" "S1_m4" "S1_m6" "S1_m7" "S2_m1" "S2_m2" "S2_m3"
# [11] "S2_m4" "S2_m6" "S2_m7" "S3_m1" "S3_m2" "S3_m3" "S3_m4" "S3_m6" "S3_m7" "S4_m1"
# [21] "S4_m2" "S4_m3" "S4_m4" "S4_m6" "S4_m7"
T3a <- T3[, order(names(T3))]
T3a[, c(1:3, 23:25)]
#   S1_m1 S1_m2 S1_m3 S4_m6 S4_m7 site
# 1     5     1  <NA>  <NA>  <NA>   a1
# 2  <NA>  <NA>  <NA>  <NA>  <NA>   a2
# 3    2a   c11  <NA>  <NA>  <NA>   a3
# 4  <NA>  <NA>  <NA>  <NA>  <NA>   a4
# 5  <NA>  <NA>  <NA>  <NA>  <NA>   a5
# 6  <NA>  <NA>  <NA>  <NA>  <NA>   a6

どちらも「rawdata」の入力として以下を使用します

rawdata <- structure(list(site = c("a1", "a1", "a1", "a2", "a2", "a2", "a2", 
"a3", "a3", "a4", "a4", "a5", "a6", "a6"), step = c("S1", "S1", 
"S2", "S1", "S1", "S3", "S4", "S1", "S1", "S1", "S2", "S3", "S2", 
"S3"), method = c("m1", "m2", "m6", "m6", "m4", "m7", "m2", "m1", 
"m2", "m4", "m2", "m3", "m1", "m4"), outcome = c("5", "1", "4", 
"1a", "3", "2", "7", "2a", "c11", "2", "5", "6", "7", "8")), .Names = c("site", 
"step", "method", "outcome"), row.names = c(NA, -14L), class = "data.frame")
于 2013-02-28T05:12:40.150 に答える