如何使用tidyr从家庭花名册中堆叠多个列

如何使用tidyr从家庭花名册中堆叠多个列,r,tidyverse,tidyr,R,Tidyverse,Tidyr,我有调查数据,每个家庭有一名受访者被问及每个家庭成员的年龄和教育水平。数据范围很广,因为每个家庭成员的年龄和教育程度都有索引列 下面是一个简单的例子: df <- data.frame( HHID = 1:2, age_1 = c(4, 19), yrsedu_1 = c(8,12), age_2 = c(7, 6), yrsedu_2 = c(14, 6) ) 我怎样才能在三天内完成这项工作?这对列造成了问题。随着gather停

我有调查数据,每个家庭有一名受访者被问及每个家庭成员的年龄和教育水平。数据范围很广,因为每个家庭成员的年龄和教育程度都有索引列

下面是一个简单的例子:

df <- 
  data.frame(
    HHID = 1:2,
    age_1 = c(4, 19),
    yrsedu_1 = c(8,12),    
    age_2 = c(7, 6),
    yrsedu_2 = c(14, 6)
  )
我怎样才能在三天内完成这项工作?这对列造成了问题。

随着gather停用,您可以再使用新的pivot\u:

由于“聚集”已停用,您可以使用新的pivot_更长时间:

它不是一个tidyverse解决方案,但仅提及它,一种替代方法是使用data.table中的melt函数:

图书馆数据表 age这不是一种tidyverse解决方案,但值得一提的是,另一种选择是使用data.table中的melt函数:

图书馆数据表
年龄是不是这个问题没有被帖子覆盖,特别是pivot_更长的答案?这个问题没有被帖子覆盖,特别是pivot_更长的答案?我们似乎已经走了一个完整的循环,pivot_更长的与旧的base R重塑没什么不同-例如:idv我不同意,在tidyverse,他们不断地试验很多东西,最终同意旧的解决方案更好PWe似乎已经走了一整圈,pivot__Long与旧的基础R重塑没有什么不同-例如:idv我不反对,在tidyverse,他们不断尝试很多东西,最终同意旧的好解决方案更好P
  data.frame(
    HHID = c(1,1,2,2),
    hh_child_number = c(1,2,1,2),
    age = c(4,7,19,6),    
    yrsedu = c(8,14,12,6))  
tidyr::pivot_longer(df, cols = -HHID, 
         names_to = c(".value", "hh_child_number"), 
         names_sep = "_") %>% type.convert(as.is = TRUE)


# A tibble: 4 x 4
#   HHID hh_child_number   age yrsedu
#  <int>           <int> <int>  <int>
#1     1               1     4      8
#2     1               2     7     14
#3     2               1    19     12
#4     2               2     6      6