2017-07-05 69 views
0

我有下列R- data.table(雖然我很高興與一個數據幀攜手合作,這個小數據集)如何展開有R數據幀/ data.table一列,

library(data.table) 

dt = readcsv(...) 
head(dt) 

    column1 column2 column3 column4 column5 column6                                                                   
1  5 456421 437141 1.044105  32935  893562                                                                   
2 42 756152 714126 1.058850  45913  1470278                                                                   
3 36 157817 150205 1.050677  14558  308022                                                                   
4 20 181700 172716 1.052016  15077  354416  

我會喜歡將column2column3合併成一列,保留所有相關的行,並使用二進制標籤來跟蹤這些值最初來自哪裏。該data.table我心目中是按以下格式:

column1 combined column4 column5 column6 from_column_2                                                                 
1  5 456421 1.044105 32935  893562 TRUE 
2  5 437141 1.044105 32935  893562 FALSE                                                             
3 42 756152 1.058850 45913  1470278 TRUE 
4 42 714126 1.058850 45913  1470278 FALSE                                                             
5 36 157817 1.050677 14558  308022 TRUE 
6 36 150205 1.050677 14558  308022 FALSE                                    
....  

我很困惑一個如何與data.table做到這一點。大多數操作都是「整個桌子」。至於使用dplyrtidyr,我不知道我是如何篩選什麼...

+3

你試過'?melt'即'melt(dt,measure.vars = c(「column2」,「column3」))' –

+1

'tidyr'解決方案是'df < - gather(df,key = source.column,value = combined,column2,column3)' –

+0

@docendodiscimus這非常好,謝謝!有沒有辦法執行此代碼,而不必在事後重新定義'variable'和'values'? – ShanZhengYang

回答

2

我會實現這個爲:

library(tidyverse) 
df = read_csv(...) 

df %>% 
    gather(from_col, combined, column2, column3) %>% 
    mutate(from_column_2 = ifelse(from_col == "column2", T, F)) 

祝您好運!