You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:35:06