2013-01-10 99 views
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") 
) 

的數據應該是相當簡單:用一個結果的位置,結果的日期和收集的時間。如你所見,日期已被用於命名包含結果的變量。每個「時間」變量涉及柱之前它 - 第一個「Jan.time」變量是在結果的時間「x.1.Jan.12」

我希望將數據重組爲四個變量 - namedate,timevalue。 我敢肯定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") 
) 
+0

我不完全確定你想要什麼輸出(也許只是我)。我收集你想要四列 - 名稱,數據,時間和價值 - 但這些列應該是什麼值?你可能會發布你想要結果如何顯示? – MadScone

+0

你能解釋一下你的當前變量嗎?它似乎是成對的:一月的日期,然後是「一月的時間」,無論如何。但是,爲什麼2月份的日期之後還會出現「Jan.time」列?正如@MadScone所建議的那樣,張貼所需輸出的例子也是有幫助的。 – A5C1D2H2I1M1N2O1R2T1

+0

什麼是正確的答案? –

回答

1

一個選項是在你的data.frame的不同子集使用melt()從「reshape2」。子集可以使用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 
+0

很好的答案 - 謝謝 –

0

新的一天常常幫助。我已經成功地工作了非重塑的解決方案,但它使用一個可怕的循環:

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)