如何使用R dataframe / data.table展开单个列,

时间:2017-07-05 15:24:29

标签: r dataframe data.table dplyr tidyr

我有以下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,我不确定我是如何过滤任何内容的......

1 个答案:

答案 0 :(得分:3)

我会将其实现为:

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

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

祝你好运!