如何在R中整理dadmom数据集?使用pivot_longer遇错求助
在R中转换家庭收支数据集格式
可重现的原始数据
先构造你提供的原始数据集:
library(tidyverse) original_data <- tibble( famid = c(1, 2, 3), named = c("Bill", "Art", "Paul"), incd = c(30000, 22000, 25000), namem = c("Bess", "Amy", "Pat"), incm = c(15000, 18000, 50000) )
正确的pivot_longer用法
你需要的是宽表转长表,通过pivot_longer的正则匹配功能可以精准实现,代码如下:
tidied_data <- original_data %>% pivot_longer( cols = -famid, names_to = c(".value", "parent"), names_pattern = "(name|inc)(d|m)" )
参数说明
cols = -famid:保留famid列,对剩余所有列执行转换names_to = c(".value", "parent"):.value是特殊占位符,用于将原列名中匹配到的name/inc作为新列名;parent存储提取出的d(父亲)/m(母亲)标识names_pattern = "(name|inc)(d|m)":正则表达式分组,第一组匹配列名前缀(name或inc),第二组匹配后缀(d或m),与names_to的两个位置一一对应
转换结果
运行后得到的数据集与你期望的格式完全一致:
# A tibble: 6 × 4 famid parent name inc <dbl> <chr> <chr> <dbl> 1 1 d Bill 30000 2 1 m Bess 15000 3 2 d Art 22000 4 2 m Amy 18000 5 3 d Paul 25000 6 3 m Pat 50000
常见报错原因
你之前使用pivot_longer报错,大概率是因为没有正确配置names_pattern和names_to的对应关系,或者未提前加载tidyverse/tidyr包。
内容的提问来源于stack exchange,提问作者Nat Larsen
相关产品推荐
相关产品推荐

