[英]Re-order data frame into columns based on row names R
初學者的問題來了,對不起...我有一個結構如下的數據集:
dat.1<-data.frame(id=c(1,1,1,2,2,2),test=c("test.1","test.2","test.3"),result=c(1,2,1,2,2,1))
dat.1
id test result
1 1 test.1 1
2 1 test.2 2
3 1 test.3 1
4 2 test.1 2
5 2 test.2 2
6 2 test.3 1
實際的數據集當前有32個測試,並且ID編號為1000 <,結果始終為二進制-測試數量和ID都會增加。 我想重新排列數據,以便每個測試(即“ test.1”)都有如下所示的列:
dat.3<-data.frame(id=c(1,2),test.1=c(1,2),test.2=c(2,2),test.3=c(1,1))
dat.3
id test.1 test.2 test.3
1 1 1 2 1
2 2 2 2 1
這樣做的一個小麻煩是,並非每個ID都經過了所有測試,因此任何解決方案都必須應對NA。 只是為了在dat.3中闡明,測試的列內容是dat.1中的結果列。
目前,我已經創建了一個“空”數據框,它可以適應添加的新測試,如下所示:
dat.2<-data.frame(id=c(1,2),test.1=c(NA,NA),test.2=c(NA,NA),test.3=c(NA,NA))
dat.2
id test.1 test.2 test.3
1 1 NA NA NA
2 2 NA NA NA
我一直在嘗試ifelse與IF dat.1 $ id == dat.2 $ id&dat.1 $ test ==“ test.1”的邏輯,然后dat.2 col = test.1,輸入dat .1 $導致dat.3 $ test.1-如果有任何意義! 出乎意料的是,沒有運氣,感覺好像我錯過了一個非常明顯的步驟/過於復雜的事情,因此,任何幫助將不勝感激-謝謝
編輯:感謝您的評論-重塑已開始有所幫助; 但是,我想我嘗試對上述示例進行簡化。 我在下面放了一個新的示例數據集:
dat.4<-data.frame(id=c(1,1,1,1,1,1,2,2,2),result=c(1,1,1,2,2,2,3,3,3),
test=c("test.1","test.2","test.3"),result=c(1,2,1,2,2,2,2,2,1))
dat.1
id result test result.1
1 1 1 test.1 1
2 1 1 test.2 2
3 1 1 test.3 1
4 1 2 test.1 2
5 1 2 test.2 2
6 1 2 test.3 2
7 2 3 test.1 2
8 2 3 test.2 2
9 2 3 test.3 1
因此,每個ID(實際上是樣本ID)都經過了一項測試,該測試已使它有資格進行進一步的測試-此測試可以有一個或多個結果。 這樣,在上面的示例中,最終的數據結構將如下所示:
dat.3<-data.frame(id=c(1,1,2),result=c(1,2,3),test.1=c(1,2,2),test.2=c(2,2,2),
test.3=c(1,2,1))
dat.3
id result test.1 test.2 test.3
1 1 1 1 2 1
2 1 2 2 2 2
3 2 3 2 2 1
因此,我真正要尋找的是基於兩個列條件的重塑-這有意義嗎?
多看了一下-答案在R手冊中(不知道我怎么錯過它) 重塑手冊
所以在上面的例子中
dat.2<-reshape(dat.1,idvar=c("id","result"),timevar="test",direction="wide")
dat.2
id result result.1.test.1 result.1.test.2 result.1.test.3
1 1 1 1 2 1
4 1 2 2 2 2
7 2 3 2 2 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.