Как использовать регулярное выражение для ifelse Tidyverse - PullRequest
1 голос
/ 09 апреля 2020

Мой 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

Теперь, как мне отделить временную группу? Я думаю, что регулярное выражение ifelse могло бы сделать это, отделяя подчеркивание

Ответы [ 2 ]

2 голосов
/ 09 апреля 2020

Использование 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

data

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))
0 голосов
/ 09 апреля 2020

База 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"
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...