【问题标题】:How to use regex for ifelse tidyverse如何将正则表达式用于 ifelse tidyverse
【发布时间】:2020-04-09 05:22:19
【问题描述】:

我的df如下

monday_A    monday_B     tuesday_A    tuesday_B
1                2               4    100
6                7               8    5

我想重新排序,让它变成

date       Group    quantitive
Monday     A        1
Monday     A        6
Monday     B        2
Monday     B        7
Tuesday    A        4
Tuesday    A        8
Tuesday    B        100
Tuesday    B        5

我做了什么

 df %>% pivot_longer(monday_A:tuesday_B, names_to="tempGroup", values_to="quantitive") 

成功了

tempGroup    quantitive
monday_A     1
monday_A     6
monday_B     2
monday_B     7
tuesday_A    4
tuesday_A    8
tuesday_B    100
tuesday_B    5

现在如何分离 tempgroup ?我认为 ifelse 的正则表达式可以通过分离 undercore 来做到这一点

【问题讨论】:

  • tidyr 上使用separate tempGroup

标签: r tidyverse


【解决方案1】:

使用names_sep

tidyr::pivot_longer(df, cols = everything(), 
                    names_sep = "_",
                    names_to= c("date", "tempGroup"), 
                    values_to="quantitative")

# A tibble: 8 x 3
#  date    tempGroup quantitative
#  <chr>   <chr>          <int>
#1 monday  A                  1
#2 monday  B                  2
#3 tuesday A                  4
#4 tuesday B                100
#5 monday  A                  6
#6 monday  B                  7
#7 tuesday A                  8
#8 tuesday B                  5

数据

df <- structure(list(monday_A = c(1L, 6L), monday_B = c(2L, 7L), 
tuesday_A = c(4L, 8L), tuesday_B = c(100L, 5L)), 
class = "data.frame", row.names = c(NA, -2L))

【讨论】:

    【解决方案2】:

    基础 R 解决方案:

    # Transpose dataframe matrix: tpd => as.data.frame
    tpd <- as.data.frame(t(df))
    
    # Restructure the dataframe into the desired format: df_td => data.frame 
    df_td <-
      data.frame(
        day = gsub("_.*", "", rep(row.names(tpd), ncol(tpd))),
        group = gsub(".*_", "", rep(row.names(tpd), ncol(tpd))),
        quantitative = unlist(tpd),
        row.names = NULL
      )
    

    数据

    # Create re-usable data: df =>  data.frame
    df <-
      structure(
        list(
          monday_A = c(1L, 6L),
          monday_B = c(2L, 7L),
          tuesday_A = c(4L,
                        8L),
          tuesday_B = c(100L, 5L)
        ),
        row.names = c(NA,-2L),
        class = "data.frame"
      )
    

    【讨论】:

      猜你喜欢
      • 2019-06-05
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 2017-12-15
      相关资源
      最近更新 更多