关于整数和因数的Pivot_longer

时间:2019-11-29 11:47:31

标签: r pivot tidyr

我有一个如下所示的数据集。

# A tibble: 1 x 4
  hhm1q001 hhm2q001 hhm1q002 hhm2q002
  <chr>    <chr>    <int>    <int>   
1 blue     red      30       50 

我一直在尝试使用tidyr::pivot_longer将其转换为long 我的预期输出如下:

  hhm   q001  q002 
  <int> <chr> <int>
1 1     blue  30   
2 2     red   50

我尝试了以下代码

HHS_long <- pivot_longer(HHS_all, 
                         cols= starts_with("hhm"), #identifies the column from which to go from wide to long
                         names_to = ("hhm"), #name(s) of new column(s) created from cols= 
                         values_drop_na = FALSE
)
head(HHS_long)   

不幸的是,我收到以下错误 .Error: No common type for hhm1q101 <factor<b5064>> and hhm1q102 <integer>.

不确定如何解决这个问题,我知道它们不是同一类,但是我在数据集中有很多变量,它们肯定属于不同的类。 希望这是发布的正确格式。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

我不熟悉pivot_longer的{​​{1}}以及它是否能够做到。使用tidyr的动词tidyr::separate和动词meltcast的组合,我能够产生预期的输出:

reshape2

答案 1 :(得分:1)

使用新的pivot_longer时,我有点挣扎。有时,我觉得在pivot_longer之前重命名变量名称可以使操作变得更加容易:

library(tidyverse)
HHS_all <- data.frame(hhm1q001 =  "blue", hhm2q001 =  "red", hhm1q002 = 30, hhm2q002 = 50)

df <- HHS_all %>% 
  rename(q001hhm1 = hhm1q001, q001hhm2 = hhm2q001, 
         q002hhm1 = hhm1q002, q002hhm2 = hhm2q002) 

df %>%
  pivot_longer(everything(), names_to = c(".value", "hhm"), names_sep = "hhm")
# A tibble: 2 x 3
  hhm   q001   q002
  <chr> <fct> <dbl>
1 1     blue     30
2 2     red      50