2013-11-28 34 views
1

我在看類似的問題,但找不到類似於我的情況。我有一個數據框,對於每個主題,每個條件都有多個觀察值。它看起來像這樣:將具有多個觀察值的行劃分爲列

subject <- c(rep("S1",4), rep("S2",4)) 
condition <- rep(c(rep("a",2), rep("b",2)),2) 
value  <- c(1:8) 
df  <- data.frame(subject,condition,value) 

df 
    subject condition value 
    S1   a  1 
    S1   a  2 
    S1   b  3 
    S1   b  4 
    S2   a  5 
    S2   a  6 
    S2   b  7 
    S2   b  8 

我想重塑它看起來像這樣:

subject condition.a condition.b 
    S1   1   3 
    S1   2   4 
    S2   5   7 
    S2   6   8 

我試圖reshapecast,但他們給我一個錯誤消息,因爲有每多次觀察主題和條件。有沒有人有如何做到這一點的建議?

謝謝!

回答

1

這個問題有點含糊不清,因爲不清楚ab的哪些值應該相互耦合。

假設你想爲(S1a),以夫婦與第一(S2b)第一個值等等,那麼你可以添加一個虛擬count列其計算的 (subject的各種事件,condition ),然後使用count_idmeltdcast的數據是這樣的:

library(plyr) 
library(reshape2) 

subject <- c(rep("S1",4), rep("S2",4)) 
condition <- rep(c(rep("a",2), rep("b",2)),2) 
value  <- c(1:8) 
df  <- data.frame(subject,condition,value) 

df.2 <- ddply(df, .(subject, condition), function(x) { x$count <- 1:nrow(x); x }) 
df.2 
# subject condition value count 
# 1  S1   a  1  1 
# 2  S1   a  2  2 
# 3  S1   b  3  1 
# 4  S1   b  4  2 
# 5  S2   a  5  1 
# 6  S2   a  6  2 
# 7  S2   b  7  1 
# 8  S2   b  8  2 

df.3 <- melt(df.2, id.vars=c('subject', 'condition', 'count')) 
dcast(df.3, subject + count ~ condition) 
# subject count a b 
# 1  S1  1 1 3 
# 2  S1  2 2 4 
# 3  S2  1 5 7 
# 4  S2  2 6 8 

這是你想要的嗎?

+0

是的,它做到了!就我的目的而言,a和b的什麼值耦合在一起並不重要。謝謝! – Sol

相關問題