从宽到长,多变量R

从宽到长,多变量R,r,tidyr,R,Tidyr,我在这里搜索过,在我自己的问题上很难使用其他例子。我尝试从宽到长,但创建新的变量头。这是我的前和后。有人能告诉我怎么做吗?多谢各位 #Wide id = c(1,2) sex = c(2,1) age = c(25,33) group = c("non_unique","unique") large_firm = c(1,6) small_firm = c(3,1) small_hi = c(6,4) large_hi = c(1,2) wide =

我在这里搜索过,在我自己的问题上很难使用其他例子。我尝试从宽到长,但创建新的变量头。这是我的前和后。有人能告诉我怎么做吗?多谢各位

#Wide
id = c(1,2) 
sex = c(2,1) 
age = c(25,33) 
group = c("non_unique","unique")
large_firm = c(1,6)
small_firm = c(3,1)
small_hi = c(6,4)
large_hi = c(1,2)
wide =data.frame(id,sex,age,group,large_firm,small_firm,small_hi,large_hi) 


#Long
id = c(1,1,2,2) 
sex = c(2,2,1,1) 
age = c(25,25,33,33) 
group = c("non_unique","non_unique","unique","unique")
firm_preference_score = c(3,1,1,6) 
hi_score = c(6,1,4,2) 
firm_size = c("small_firm","large_firm","small_firm","large_firm")
hi_group = c("small","large","small","large")
long =data.frame(id,sex,age,group,firm_size,firm_preference_score,hi_group,hi_score) 

您可以再使用
pivot\u

tidyr::pivot_longer(wide, 
                     cols = large_firm:large_hi, 
                     names_to = c('firm_size', '.value'), 
                     names_sep = '_')

#     id   sex   age group      firm_size  firm    hi
#  <dbl> <dbl> <dbl> <chr>      <chr>     <dbl> <dbl>
#1     1     2    25 non_unique large         1     1
#2     1     2    25 non_unique small         3     6
#3     2     1    33 unique     large         6     2
#4     2     1    33 unique     small         1     4

这回答了你的问题吗?
library(dplyr)

tidyr::pivot_longer(wide, 
                    cols = large_firm:large_hi, 
                     names_to = c('firm_size', '.value'), 
                     names_sep = '_') %>%
    mutate(hi_group = firm_size, 
           firm_size = paste(firm_size, 'firm', sep = '_')) %>%
    rename(firm_preference_score = firm, hi_score = hi)