仅对 R 中的某些列使用 melt

Using melt only for certain columns in R

下面是示例数据。 pct10、pct25、median 和 pct75 是小时工资。他们下面的同行是年薪。难题是如何在复制描述性项目的同时基本上只折叠下面的这些;行业和职业。期望的结果如下。 Ratetype 将是一个新的 field/column,其中 1 代表每小时,4 代表每年。我以前的尝试导致创建的行太多。在这种情况下,最终结果将是 4 original * 2。

首先,融化是解决这个问题的最佳方法吗?

其次,是否像 occmelt2<- melt(occmelt, id.vars = c()) 一样简单,只需指定正确的 Id 变量

industry<-c(000000,000000,000000,000000)
occupation<-c(110000,120000,130000,140000)
pct10 <-c(11,15,26.25,19.50)
pct25 <-c(13,14.50,15.65,15.95)
median <-c(22,22.50,23.50,29)
pct75<-c(24,23.75,22,26.50)
Annualpct10 <-c(44000,45000,46000,49000)
Annualpct25 <-c(48000,49000,52000,54000)
Annualmedian <-c(54000,55000,56700,59800)
Annualpct75 <-c(64000,65000,71000,72700)

occmelt <- data.frame(industry,occupation,pct10,pct25,median,pct75,Annualpct10,Annualpct25,Annualmedian,Annualpct75)

industry   occupation    rateype    pct10   pct25   median   pct75
000000      110000          1         11      13     22        24 
000000      110000          4        44000   48000   54000     54000 
000000      120000          1         15     14.50   22.5      23.75
000000      120000          4        45000   49000   55000     65000    

下面是一个带有pivot_longer

的选项
  1. 重命名以 'pct' 或 'median' 开头的列以添加前缀 'Hourly'
  2. 使用 pivot_longernames_sep 在字符和 'pct' 或 'median'
  3. 之间拆分
  4. 然后,recode将'Hourly'、'Annual'分别设为1和4
library(dplyr)
library(tidyr)
library(stringr)
occmelt %>% 
   rename_with(~ str_c('Hourly', .), matches('^(pct|median)')) %>%
   pivot_longer(cols = matches('pct|median'), 
      names_to = c('ratetype', '.value'), 
            names_sep = "(?<=.)(?=(pct|median))") %>%
    mutate(ratetype = recode(ratetype, Hourly = "1", Annual = "4"))

-输出

# A tibble: 8 x 7
  industry occupation ratetype   pct10   pct25  median   pct75
     <dbl>      <dbl> <chr>      <dbl>   <dbl>   <dbl>   <dbl>
1        0     110000 1           11      13      22      24  
2        0     110000 4        44000   48000   54000   64000  
3        0     120000 1           15      14.5    22.5    23.8
4        0     120000 4        45000   49000   55000   65000  
5        0     130000 1           26.2    15.6    23.5    22  
6        0     130000 4        46000   52000   56700   71000  
7        0     140000 1           19.5    16.0    29      26.5
8        0     140000 4        49000   54000   59800   72700