R中data.frame的部分宽到长格式

Ilj*_*tch 1 r dataframe

晚上好,

我现在有一个类似于此的数据框:

ID Day1Var1 Day1Var2 Day2Var1 Day2Var2 
1     1        2        3        4
2     5        6        7        8
Run Code Online (Sandbox Code Playgroud)

我想把它带到一个看起来像这样的长格式:

ID    Day   Var1   Var2 
1      1      1      2  
1      2      3      4
2      1      5      6  
2      2      7      8
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法来使用变量的前缀项("Day1","Day2")来创建一个名为"Day"的新变量并自动填充值1和2?这将非常有用,因为我有三个级别的前缀(观察,日,周).

非常感谢!

phi*_*ver 6

您可以使用以下代码:

首先,我们以长格式收集数据,将列密钥拆分为day,var得到拆分.我从第1天开始删除日期并将数据传播到正确的表单中.不确定单独和子串是否不能在一步中完成.

library(tidyr)
library(dplyr)

df1 %>% 
  gather(key, value, -ID) %>% 
  separate(key, into = c("Day", "Var"), sep = 4) %>% 
  mutate(Day = substring(Day, 4, 4)) %>% 
  spread(Var, value)
  ID Day Var1 Var2
1  1   1    1    2
2  1   2    3    4
3  2   1    5    6
4  2   2    7    8
Run Code Online (Sandbox Code Playgroud)

数据:

df1 <- structure(list(ID = 1:2, Day1Var1 = c(1L, 5L), Day1Var2 = c(2L, 
6L), Day2Var1 = c(3L, 7L), Day2Var2 = c(4L, 8L)), class = "data.frame", row.names = c(NA, 
-2L))
Run Code Online (Sandbox Code Playgroud)