2015-05-26 158 views
1

我有以下格式的數據集:重塑數據幀

name1 year name2 profits2010 profits2009 count 
AA 2009 AA 10   15   20 
AA 2010 AA 10   15   3 
BB 2009 BB  4   NA   34 
BB 2010 BB  4   NA   4 

我需要將數據重塑這個format.Any想法如何可以做到這一點?

name1 year name2 profits count 
AA 2009 AA  15  20 
AA 2010 AA  10  3 
BB 2009 BB  NA  34 
BB 2010 BB  4  4 
+0

如果您正在尋找到'year'列和colnames'profits2009'和'profits2010'匹配,則輸入名稱將被逆轉 – akrun

+0

是他們是正確的。 – user3570187

+0

我的意思是第一行,年份是2009年,但是你從profit2010中選擇元素。和2010年一樣,從利潤中選擇2009年。 – akrun

回答

0

嘗試

indx <- grep('profits', names(df1)) 
indx2 <- cbind(1:nrow(df1), match(df1$year, 
       as.numeric(sub('\\D+', '', names(df1)[indx])))) 
df1$profits <- df1[indx][indx2] 
df1[-indx] 
# name1 year name2 count profits 
#1 AA 2009 AA 20  15 
#2 AA 2010 AA  3  10 
#3 BB 2009 BB 34  NA 
#4 BB 2010 BB  4  4 
0

這不是真的重塑,只是定義一個新的變量。試試這個:

df$profits <- ifelse(df$year==2009,df$profits2009,df$profits2010) 
+0

我有8年的數據。代碼是否相同 – user3570187

+0

@akrun爲什麼要這樣做? ifelse的第二個參數是真實值,第三個是false值。如果這一年是2009年,它應該抓住2009年的價值。 – jrdnmdhl

+0

@ user3570187如果還有更多的年份,那麼你將需要一些更復雜的東西,但你可能只是嵌套幾個ifelse語句。 – jrdnmdhl