2

※コメントを受けて編集中

分析用に準備しようとしているデータセットがあります。

raw<-data.frame(
  name=c("Place 1", "Place 2", "Place 3", "Place 4"),
  x.1.Jan.12=c(1, NA, 0.5, NA),
  Jan.time=c("0900", NA, "0930", NA),
  x.15.Jan.12=c(NA, 0.7, NA, NA),
  Jan.time=c(NA, "1030", NA, NA),
  x.3.Feb.12=c(0.8, 0.6, 0.4, NA),
  Feb.time=c("0715", "0800", "0830", NA),
  x.8.Feb.12=c(NA, NA, 0.65, 0.33),
  Feb.time=c(NA, NA, "?", "1123")
  )

データは非常に単純なものである必要があります。結果のある場所、結果の日付、および収集された時間です。ご覧のとおり、date は結果を含む変数の名前に使用されています。各「時間」変数は、その前の列に関連しています。最初の「Jan.time」変数は、「x.1.Jan.12」の結果の時間です。

nameデータを、date、の 4 つの変数に再構成したいと考えていtimeますvalue。私は reshape2 がそれを行うことができ、データが溶けていると確信しています:

mDat<-melt(raw, id=c("name"))

次のステップがうまくいかない - おそらく変な変数名に関係している.

私が望む結果は次のとおりです。

outData<-data.frame(
  name=c("Place 1", "Place 2", "Place 3", "Place 4", "Place 1", "Place 2", "Place 3", "Place 4", "Place 1", "Place 2", "Place 3", "Place 4", "Place 1", "Place 2", "Place 3", "Place 4"),
  date=c("1-Jan-12", "1-Jan-12", "1-Jan-12", "1-Jan-12", "15-Jan-12", "15-Jan-12", "15-Jan-12", "15-Jan-12", "3-Feb-12", "3-Feb-12", "3-Feb-12", "3-Feb-12", "8-Feb-12", "8-Feb-12", "8-Feb-12", "8-Feb-12"),
  value=c(1, NA, 0.5, NA, NA, 0.7, NA, NA, 0.8, 0.6, 0.4, NA, NA, NA, 0.65, 0.33),
  time=c("0900", NA, "0930", NA, NA, "1030", NA, NA, "0715", "0800", "0830", NA, NA, NA, "?", "1123")
)
4

2 に答える 2

1

1つのオプションはmelt()、のさまざまなサブセットで「reshape2」から使用することdata.frameです。サブセットは、を使用して抽出できますgrep()

library(reshape2)
temp <- cbind(
    setNames(melt(raw[c(1, grep("time", names(raw)))], id.vars="name"), 
             c("name", "mon.time", "time")),
    setNames(melt(raw[grep("time", names(raw), invert = TRUE)], id.vars="name"),
             c("name", "date", "result")))
temp[, c("name", "result", "time", "date")]
#       name result time        date
# 1  Place 1   1.00 0900  x.1.Jan.12
# 2  Place 2     NA <NA>  x.1.Jan.12
# 3  Place 3   0.50 0930  x.1.Jan.12
# 4  Place 4     NA <NA>  x.1.Jan.12
# 5  Place 1     NA <NA> x.15.Jan.12
# 6  Place 2   0.70 1030 x.15.Jan.12
# 7  Place 3     NA <NA> x.15.Jan.12
# 8  Place 4     NA <NA> x.15.Jan.12
# 9  Place 1   0.80 0715  x.3.Feb.12
# 10 Place 2   0.60 0800  x.3.Feb.12
# 11 Place 3   0.40 0830  x.3.Feb.12
# 12 Place 4     NA <NA>  x.3.Feb.12
# 13 Place 1     NA <NA>  x.8.Feb.12
# 14 Place 2     NA <NA>  x.8.Feb.12
# 15 Place 3   0.65    ?  x.8.Feb.12
# 16 Place 4   0.33 1123  x.8.Feb.12
于 2013-01-11T11:17:45.567 に答える
0

多くの場合、新しい日が役立ちます。私はなんとか形を変えない解決策を考え出しましたが、それは恐ろしい for ループを使用しています:

subList<-list()
for(i in seq(2,8,2)){
  temp<-raw[c(1, i, i+1)]
  temp$date<-rep(names(temp)[2], nrow(temp))
  names(temp)<-c("name", "result", "time", "date")
  subList[[i/2]]<-temp
}

solution1<-do.call("rbind", subList)
于 2013-01-11T09:25:54.720 に答える