1

データロガーの 1 つから大量の温度データをダウンロードしました。データフレームは、87 個の温度センサーについて 1691 時間の温度の毎時平均観測値を提供します (したがって、ここには多くのデータがあります)。これは次のように見えます

D1_A     D1_B     D1_C
13.43    14.39    12.33
12.62    13.53    11.56
11.67    12.56    10.36
10.83    11.62    9.47

このデータセットを次のようなマトリックスに再形成したいと思います。

#create a blank matrix 5 columns 131898 rows 
matrix1<-matrix(nrow=131898, ncol=5)
colnames(matrix1)<- c("year", "ID", "Soil_Layer", "Hour", "Temperature")

どこ:

year is always "2012"
ID corresponds to the header ID (e.g. D1)
Soil_Layer corresponds to the second bit of the header (e.g. A, B, or C)
Hour= 1:1691 for each sensor 
and Temperature= the observed values in the original dataframe. 

これは r の reshape パッケージで実行できますか? これはループとして実行する必要がありますか? このデータセットの処理方法に関する情報は役に立ちます。乾杯!

4

1 に答える 1

2

これはあなたが望むことだと思います...パッケージのcolsplit()と関数を利用できます。データの を特定する場所が明確でないため、元のデータセットから注文されたと仮定しました。そうでない場合は、質問を更新してください。melt()reshape2Hour

library(reshape2)
#read in your data
x <- read.table(text = "

    D1_A    D1_B  D1_C
    13.43 14.39   12.33
    12.62 13.53   11.56
    11.67 12.56   10.36
    10.83 11.62   9.47
    9.98  10.77   9.04
    9.24  10.06   8.65
    8.89  9.55    8.78
    9.01  9.39    9.88
", header = TRUE)

#add hour index, if data isn't ordered, replace this with whatever 
#tells you which hour goes where
x$hour <- 1:nrow(x)
#Melt into long format
x.m <- melt(x, id.vars = "hour")
#Split into two columns
x.m[, c("ID", "Soil_Layer")] <- colsplit(x.m$variable, "_", c("ID", "Soil_Layer"))
#Add the year
x.m$year <- 2012

#Return the first 6 rows
head(x.m[, c("year", "ID", "Soil_Layer", "hour", "value")])
#----
  year ID Soil_Layer hour value
1 2012 D1          A    1 13.43
2 2012 D1          A    2 12.62
3 2012 D1          A    3 11.67
4 2012 D1          A    4 10.83
5 2012 D1          A    5  9.98
6 2012 D1          A    6  9.24
于 2013-04-30T00:08:51.203 に答える