2015-12-03 97 views
2

我有相同的數據集,但886,120行(34 ID,每個ID有22,271行)被轉換爲34行,22,271列。將多行數據轉換爲R中的單行

Raw ID(34) Values(22,271 for each ID) 

1 AND 0.08333 
2 BEL 0.08333 
3 ARR 0.2292 
4 AND 0.3056 
5 AND 0.3056 
6 BEL 0.3333 
7 AKT 0.3421 
8 BEL 0.3667 
9 AKTK 0.3684 
10 ARR 0.4583 
11 ARR 0.4583 
12 AKTK 0.7105 
... 
886120 ARR 0.2152 

=========================================== 
To be convert with the following format: 
=========================================== 
ID  Value1 Value2 Value3 ... Value22,721 

AKTK 0.7105 0.3421 0.3684 
AND 0.3056 0.3056 0.08333 
ARR 0.4583 0.4583 0.2292 
BEL 0.3333 0.3667 0.08333 

有人能幫助我嗎?

+2

你是否需要多行的'mean'的'sum'?試試'library(data.table); setDT(df1)[,N:= paste0('Value',1:.N),ID]; dcast(df1,ID〜N,value.var ='Values',mean)'或改爲'sum' – akrun

+0

這就是所謂的從長整形到寬整形。有幾種方法可用,這肯定是在這方面的一個重複的問題 –

+0

可能重複[重新整形數據從長到寬,與時間在新的廣泛變量名稱](http://stackoverflow.com/questions/3320515/reshape-數據從長到寬,隨時間變化的新變量名稱) –

回答

1

如果您的數據框是按照ID排序的,那麼這就行得通了。您添加描述值的羣體應該一起去,結果一列一列,然後這個工程:

df <- data.frame(ID=rep(LETTERS,100), 
       valueID=rep(1:100,each=26), 
       values=rnorm(2600)) 
library(reshape2) 
df2 <- dcast(df,ID~valueID) 

因此,也許你可以做

oo <- order(your.df$ID) 
df <- cbind(your.df[oo,],valueID=paste0('value',rep(1:22721,each=34))) 

然後做什麼,我在上面做了。 @ akrun的data.table解決方案也可以工作,因爲N和ID一起指定一個唯一的單元格,所以平均值不作任何貢獻。但是在這兩種情況下,你需要先排序。