1

ループと単純な減算関数を組み合わせた値の新しいベクトルを作成しようとしています。

私のデータ: 37 の日付、1 日あたり 48 の観測があり、そのうち 24 の観測が「処理」として指定され、24 が「対照」として指定されています (つまり、毎日 24 のペアがあり、各ペア内で 1 つは処理され、もう 1 つは処理されます)。コントロール)。

コントロールフラックス値と治療フラックス値の差である新しい変数を作成したい(したがって、各ペアセット内のコントロールフラックスに対する治療フラックスの定量的効果を分離する)が、他のすべてのメタデータ(日付、ペアセットなど)。

これは、私のデータの 1 日がどのように見えるかです。

    date    collar  setID   withinset   CH4_mg.m2.h CO2_mg.m2.h
6/20/2013   1   1   t   0.557704455 2930.10525
6/20/2013   2   1   c   0.49434559  2823.564824
6/20/2013   1S  2   c   2.205589818 2014.835162
6/20/2013   2S  2   t   2.854174288 1996.614314
6/20/2013   3   3   c   4.548922035 1818.766532
6/20/2013   4   3   t   2.352010011 1575.160171
6/20/2013   3S  4   c   1.022583517 1289.122553
6/20/2013   4S  4   t   4.377283389 2888.582123
6/20/2013   5   5   t   1.340228189 2636.685313
6/20/2013   6   5   c   1.1954218   1782.670702
6/20/2013   5N  6   c   4.217147165 1631.184251
6/20/2013   6N  6   t   1.836410187 1031.5654
6/20/2013   7   7   t   2.051102645 2609.285292
6/20/2013   8   7   c   1.96837465  2454.56188
6/20/2013   7N  8   c   3.66876257  2253.766863
6/20/2013   8N  8   t   3.460709848 2853.823753
6/20/2013   9   9   t   1.084707894 771.0890746
6/20/2013   10  9   c   1.915678246 857.8528567
6/20/2013   9S  10  c   3.555408983 569.5288078
6/20/2013   10S 10  t   3.401276615 588.6532344
6/20/2013   11  11  c   2.970877855 1324.872897
6/20/2013   12  11  t   2.028830249 956.9233078
6/20/2013   11S 12  t   8.063764267 1516.712685
6/20/2013   12S 12  c   4.160007577 986.7419756
6/20/2013   13  13  c   8.351615925 1484.538885
6/20/2013   14  13  t   7.682825572 1573.40649
6/20/2013   13N 14  c   6.688854043 1400.82208
6/20/2013   14N 14  t   4.426522661 985.5632563
6/20/2013   15  15  c   2.240328624 467.566316
6/20/2013   16  15  t   2.395533405 470.3854269
6/20/2013   15N 16  c   3.145509032 1053.025448
6/20/2013   16N 16  t   3.989964648 1602.760702
6/20/2013   17  17  t   3.117849324 656.6618375
6/20/2013   18  17  c   3.719289098 575.5902064
6/20/2013   17S 18  t   2.75248536  914.3974523
6/20/2013   18S 18  c   3.253130586 906.1170518
6/20/2013   19  19  c   2.068481806 465.0783511
6/20/2013   20  19  t   6.696415968 1362.594187
6/20/2013   19N 20  t   3.25099946  437.389186
6/20/2013   20N 20  c   2.923361538 504.803891
6/20/2013   21N 21  t   5.704969796 1190.943268
6/20/2013   22N 21  c   7.014650089 1550.961323
6/20/2013   23S 22  c   6.277550864 1408.528849
6/20/2013   24S 22  t   8.3399388   1573.475572
6/20/2013   21  23  c   7.722659069 1467.822676
6/20/2013   22  23  t   12.51091848 1276.049909
6/20/2013   23  24  t   10.81073531 2052.516537
6/20/2013   24  24  c   0.797904749 884.0794505

CO2 フラックス (CO2_mg.m2.h) と CH4 フラックス (CH4_mg.m2.h) の両方のコード セットを個別に作成する必要がありますが、基本のスケルトン コードが機能するようになれば、簡単に複製できるはずです。

これはCH4の私の試みたコードです:

t_minus_c <- rep(0,37) # 37 dates
    for (i in 1:37){
    for (j in 1:24){ #24 collar pairs, aka setID
    {tmc[i] <- ((data$CH4_mg.m2.h[which(data$date==i & data$setID==j & withinset=="t"),]) - 
    (data$CH4_mg.m2.h[which(data$date==i & data$setID==j & withinset=="c"),]))}
    }
}

CO2 フラックス (CO2_mg.m2.h) と CH4 フラックス (CH4_mg.m2.h) の両方のコード セットを別々に作成する必要があります。

私はそれが不格好であることを知っています、そしてどんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

0

data.tableの代わりに使用することを検討できますdata.frame。この種の作業を非常に簡単かつエレガントに行うことができます..

あなたのデータがdata.frame DT.

require(data.table)
DT <- data.table(DF)
setkey(DT, date, setID, withinset) #order data by date, then setID and then withinset
TMP <- DT[, list(CH4 = diff(CH4_mg.m2.h), CO2 = diff(CO2_mg.m2.h)), by=list(date, setID)]
TMP

出力は次のようになります。

         date setID         CH4         CO2
 1: 6/20/2013     1  0.06335886  106.540426
 2: 6/20/2013     2  0.64858447  -18.220848
 3: 6/20/2013     3 -2.19691202 -243.606361
 4: 6/20/2013     4  3.35469987 1599.459570
 5: 6/20/2013     5  0.14480639  854.014611
 6: 6/20/2013     6 -2.38073698 -599.618851
 7: 6/20/2013     7  0.08272799  154.723412
 8: 6/20/2013     8 -0.20805272  600.056890
 9: 6/20/2013     9 -0.83097035  -86.763782
10: 6/20/2013    10 -0.15413237   19.124427
11: 6/20/2013    11 -0.94204761 -367.949589
12: 6/20/2013    12  3.90375669  529.970709
13: 6/20/2013    13 -0.66879035   88.867605
14: 6/20/2013    14 -2.26233138 -415.258824
15: 6/20/2013    15  0.15520478    2.819111
16: 6/20/2013    16  0.84445562  549.735254
17: 6/20/2013    17 -0.60143977   81.071631
18: 6/20/2013    18 -0.50064523    8.280401
19: 6/20/2013    19  4.62793416  897.515836
20: 6/20/2013    20  0.32763792  -67.414705
21: 6/20/2013    21 -1.30968029 -360.018055
22: 6/20/2013    22  2.06238794  164.946723
23: 6/20/2013    23  4.78825941 -191.772767
24: 6/20/2013    24 10.01283056 1168.437087
         date setID         CH4         CO2

簡単に言えば data.table DT、条件を満たすDT[i,j,by]行を選択し、 listによって提供されるグループ化変数によって提供されるすべてのグループに対して、 list で指定された計算を使用して列を作成します。これは、どのように機能するかについての非常に大まかな説明です。理解を深めるために、マニュアルを読む必要があります。DTijbydata.tabledata.table

于 2013-10-29T02:29:32.850 に答える