2017-07-05 3 views
0

ich folgende R data.table haben (obwohl ich glücklich bin mit einem Datenrahmen für diese kleine Datenmenge zu arbeiten)Wie eine einzelne Spalte mit R Datenrahmen/data.table entfalten,

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  

würde ich Sie können column2 und column3 in eine Spalte zusammenführen, indem Sie alle zugehörigen Zeilen beibehalten und ein binäres Label verwenden, um zu verfolgen, woher diese Werte ursprünglich stammen. Die data.table ich im Sinn haben, ist in folgendem Format:

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                                    
....  

ich sehr verwirrt bin, wie man würde mit data.table dies zu tun. Die meisten Operationen sind "tabellenweit". Was dplyr oder tidyr verwenden, bin ich nicht sicher, wie ich etwas bin Filterung ...

+3

haben Sie versucht "? Schmelzen" dh 'schmelzen (dt, measure.vars = c (" column2 "," column3 "))' –

+1

Die 'tidyr' Lösung wäre' df <- gather (df, key = source.column, value = combined, column2, column3) ' –

+0

@docendodiscimus Das ist ausgezeichnet, danke! Gibt es eine Möglichkeit, diesen Code auszuführen, ohne 'Variable' und' Werte' nachträglich neu definieren zu müssen? – ShanZhengYang

Antwort

2

Ich würde dies umzusetzen als:

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

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

Best of luck!

Verwandte Themen