2016-04-08 105 views
0

我是R新手,在這裏需要一些幫助來構建我的數據。R:從另一個數據幀中獲取對應的值

我有兩個數據集: 其中之一是內對象的數據集是大的,看起來很長的格式有點像這樣:

long.format <- data.frame(subject.no = c(1, 1, 1, 1, 2, 2, 2, 2), condition = c("prime", "prime", "prime", "prime", "control", "control","control","control"), response = c(1,1,1,0,1,1,1,0)) 

    subject.no condition response 
>1   1  prime  1 
>2   1  prime  1 
>3   1  prime  1 
>4   1  prime  0 
>5   2 control  1 
>6   2 control  1 
>7   2 control  1 
>8   2 control  0 

另一種是已經在寬格式和外觀這樣

wide.format <- data.frame(subject = c(1, 2), age = c(26,27), gender = c("m","f")) 

    subject age gender 
>1  1 26  m 
>2  2 27  f 

我想現在唯一要做的就是在「條件」得到的值(也只有這個!)從長格式的數據幀在寬的數據幀中的相應科目通過添加寬數據框中的新列(使用列subject.no和subject)。

因此,最終數據幀應該是這樣的:

wide.format.aim <- data.frame(subject = c(1, 2), age = c(26,27), gender = c("m","f"), condition = c("prime","control")) 

     subject age gender condition 
>1  1 26  m  prime 
>2  2 27  f control 

我試圖合併,但該結束了從寬幅數據幀中的信息增加了長格式的數據幀...但我希望它周圍的其他方法...

這是我已經試過:

test.it <- merge(x=wide.format, y=long.format[,c("subject.no", "condition")], all.x=T, by.x="subject", by.y="subject.no") 

有什麼建議?

在此先感謝!

+0

我曾嘗試合併這些值(抱歉,這是與真實變量名) 測試合併。它合併(x = data.values,y = data [,c(「subject_nr」,「Bedingung」)],all.x = T,by.x =「vp.list」,by.y =「subject_nr 「) - 但這不起作用(如果你喜歡我可以解釋發生了什麼更多的話......) – Mathias

+0

好吧!希望這現在很容易理解 – Mathias

回答

0

您有興趣從long.format[,c("subject.no", "condition")]合併獨特的價值觀:

unique(long.format[,c("subject.no", "condition")]) 
# subject.no condition 
#1   1  prime 
#5   2 control 

可以使用

merge(x = wide.format, 
     y = unique(long.format[,c("subject.no", "condition")]), 
     by.x = "subject", 
     by.y = "subject.no") 
# subject age gender condition 
#1  1 26  m  prime 
#2  2 27  f control 
+0

所以它只是一個簡單的詞「唯一()」在正確的地方......它確實工作,所以非常感謝你! – Mathias

+0

@Mathias你也可以在現有代碼的周圍拋出一個'unique()',但是在獨特的子集上合併似乎更有效率,而不是先合併然後過濾掉重複。 – Jota

相關問題