【问题标题】:wide to long, multiple variables R [duplicate]宽到长,多个变量R [重复]
【发布时间】:2020-06-22 01:57:27
【问题描述】:

我在这里搜索过,在我自己的问题上使用其他示例时遇到困难。我正在尝试从宽到长,但要创建新的可变标头。这是我的前后。有人可以告诉我如何做到这一点吗?谢谢。

#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) 

【问题讨论】:

标签: r tidyr


【解决方案1】:

你可以使用pivot_longer

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)

【讨论】:

    猜你喜欢
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    相关资源
    最近更新 更多