R通过拆分列名将df从宽转换为长

R通过拆分列名将df从宽转换为长,r,tidyr,R,Tidyr,我正在尝试将下面的df_原始data.frame转换为df_目标中的表单。原始data.frame中的列应拆分,后一部分作为键,而第一部分应保留为变量名。我更愿意使用tidyverse解决方案,但我对每一个问题都持开放态度。多谢各位 df_original <- data.frame(id = c(1,2,3), variable1_partyx = c(4,5,6), variable1_partyy = c(14,15,16),

我正在尝试将下面的df_原始data.frame转换为df_目标中的表单。原始data.frame中的列应拆分,后一部分作为键,而第一部分应保留为变量名。我更愿意使用tidyverse解决方案,但我对每一个问题都持开放态度。多谢各位

df_original <- 
  data.frame(id = c(1,2,3),
           variable1_partyx = c(4,5,6),
           variable1_partyy = c(14,15,16),
           variable2_partyx = c(24,25,26),
           variable2_partyy = c(34,35,36))

df_goal <- 
  data.frame(id = c(1,1,2,2,3,3),
             key = c("partyx","partyy","partyx","partyy","partyx","partyy"),
             variable1 = c(4,14,5,15,6,16),
             variable2 = c(24,34,25,35,26,36))

例如,df_original%>%gatherkey,value,2:5%>%separatekey,into=cvvariable,key%>%spreadvariable,value完成任务谢谢,工作非常好。
df_original %>%
  tidyr::gather(key, value, -id) %>%
  tidyr::separate(key, into = c("var", "key"), sep = "_") %>%
  tidyr::spread(var, value)