在 table 上使用 pivot_longer 在 R 中?

Use pivot_longer on wide-like table in R?

我有一些数据看起来像这样

color   value_morning   quality_morning value_evening   quality_evening value_night quality_night
red     10              good            9               good            10          good
blue    7               bad             8               great           10          great
green   7               bad             8               good            6           bad

我正在尝试使用 pivot_longer()(或任何其他 tidy 方法)将其转换为:

color   value   time
red     10      morning
blue    7       morning
green   7       morning
red     9       evening
blue    8       evening
green   8       evening
red     10      night
blue    10      night
green   6       night

我不需要 quality_ 数据,只需要 value_ 数据。

我尝试创建一个看起来像 labels <- c("value_morning", "value_evening", "value_night") 和 运行 df %>% pivot_longer(cols = labels) 的向量,但是没有用。感谢您的帮助!

我们删除 quality 列,然后执行 pivot_longer

library(dplyr)
library(tidyr)
df1 %>% 
   select(-starts_with('quality')) %>% 
   pivot_longer(cols = -color, names_to = c(".value", "time"), 
          names_pattern = "(.*)_(.*)")

-输出

# A tibble: 9 × 3
  color time    value
  <chr> <chr>   <int>
1 red   morning    10
2 red   evening     9
3 red   night      10
4 blue  morning     7
5 blue  evening     8
6 blue  night      10
7 green morning     7
8 green evening     8
9 green night       6

数据

df1 <- structure(list(color = c("red", "blue", "green"), value_morning = c(10L, 
7L, 7L), quality_morning = c("good", "bad", "bad"), value_evening = c(9L, 
8L, 8L), quality_evening = c("good", "great", "good"), value_night = c(10L, 
10L, 6L), quality_night = c("good", "great", "bad")),
 class = "data.frame", row.names = c(NA, 
-3L))