【问题标题】:How to unfold a single column with R dataframe/data.table,如何使用 R dataframe/data.table 展开单列,
【发布时间】:2017-07-05 15:24:29
【问题描述】:

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

【问题讨论】:

  • 你试过?meltmelt(dt, measure.vars = c("column2", "column3"))
  • tidyr 解决方案将是 df <- gather(df, key = source.column, value = combined, column2, column3)
  • @docendodiscimus 这太好了,谢谢!有没有办法执行这段代码,而不必事后重新定义variablevalues

标签: r dataframe data.table dplyr tidyr


【解决方案1】:

我会这样实现:

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

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

祝你好运!

【讨论】:

    猜你喜欢
    • 2021-06-06
    • 2021-07-17
    • 2018-05-19
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 2022-01-15
    • 2022-01-18
    相关资源
    最近更新 更多