我有一个如下所示的数据集。
# 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>.
不确定如何解决这个问题,我知道它们不是同一类,但是我在数据集中有很多变量,它们肯定属于不同的类。 希望这是发布的正确格式。
感谢您的帮助
答案 0 :(得分:1)
我不熟悉pivot_longer
的{{1}}以及它是否能够做到。使用tidyr
的动词tidyr::separate
和动词melt
和cast
的组合,我能够产生预期的输出:
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