【问题标题】:how to convert wide dataframe columns to long format using sparklyr? [duplicate]如何使用 sparklyr 将宽数据框列转换为长格式? [复制]
【发布时间】:2020-06-08 07:30:53
【问题描述】:

我有一个数据框,其中包含 id、price1、price2、price3、prob1、prob2、prob3 列我想将宽格式和价格、prob 列转换为长格式

library(dplyr)
library(data.table)


a <- data.table("id" = c(1,2,4),
                "price1"=c(1.2,2.44,5.6),
                "price2"=c(7.6,8,65),
                "price3"=c(1.2,4.5,7.8),
                "prob1"=c(0.1,0.3,0.5),
                "prob2"=c(0.3,0.35,0.75),
                "prob3"=c(0.18,0.31,0.58))

> a
  id price1 price2 price3 prob1 prob2 prob3
1  1   1.20    7.6    1.2   0.1  0.30  0.18
2  2   2.44    8.0    4.5   0.3  0.35  0.31
3  4   5.60   65.0    7.8   0.5  0.75  0.58

我想将表格a 转换为

b <- data.table("id"=c(1,1,1,2,2,2,3,3,3),
                "order"=c(1,2,3,1,2,3,1,2,3),
                "price"=c(1.20,7.6,1.2,2.44,8.0,4.5,5.60,65.0,7.8),
                "prob"=c(0.1,0.30,0.18,0.3,0.35,0.31,0.5,0.75,0.58))

> b
   id order price prob
1:  1     1  1.20 0.10
2:  1     2  7.60 0.30
3:  1     3  1.20 0.18
4:  2     1  2.44 0.30
5:  2     2  8.00 0.35
6:  2     3  4.50 0.31
7:  3     1  5.60 0.50
8:  3     2 65.00 0.75
9:  3     3  7.80 0.58

这里的 order 表示 price 和 prob 值的序列号,否则会被打乱。 我想在sparklyr 中进行这种转换

【问题讨论】:

    标签: r dplyr sparklyr


    【解决方案1】:

    您可以使用pivot_longer 指定names_pattern

    tidyr::pivot_longer(a, cols = -id, 
                        names_to = c('.value', 'order'), 
                        names_pattern = '(.*?)(\\d+)')
    
    # A tibble: 9 x 4
    #     id order price  prob
    #  <dbl> <chr> <dbl> <dbl>
    #1     1 1      1.2  0.1  
    #2     1 2      7.6  0.3  
    #3     1 3      1.2  0.18 
    #4     2 1      2.44 0.3  
    #5     2 2      8    0.35 
    #6     2 3      4.5  0.31 
    #7     4 1      5.6  0.5  
    #8     4 2     65    0.75 
    #9     4 3      7.8  0.580
    

    【讨论】:

    • 嘿 Ronak,感谢您的解决方案。我已经编辑了我想在 sparklyr 中实现的问题
    猜你喜欢
    • 2016-02-08
    • 2022-11-16
    • 2021-07-20
    • 2018-07-19
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    相关资源
    最近更新 更多