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

如何将含多组关联列的DataFrame从宽格式转长格式(R语言)

调查数据宽转长:多问题关联对应颜色的解决方案

这是我此前Stack Overflow问题的跟进提问,虽然有类似问题,但我的数据结构存在差异。

我手头有一份调查数据:受访者先选择喜欢的颜色(Q1字段为逗号分隔的颜色字符串),随后针对所选的每一种颜色回答多个后续问题(Q2、Q3),数据集的列名采用「问题描述 - 颜色」的组合格式。示例数据如下:

df <- data.frame(
    ID = 1:3,
    Q1 = c("Purple, Red, Blue", "Red, Blue, Yellow", "Red"),
    "Q2: Is it your favorite color? - Purple" = c("Average", NA, NA),
    "Q2: Is it your favorite color? - Red" = c("No", "No", "Average"),
    "Q2: Is it your favorite color? - Blue" = c("Yes", "No", NA),
    "Q2: Is it your favorite color? - Yellow" = c(NA, "Average", NA),
    "Q3: Why did you choose this color? - Purple" = c("Pretty", NA, NA),
    "Q3: Why did you choose this color? - Red" = c("Pretty", "Vibrancy", "Beautiful"),
    "Q3: Why did you choose this color? - Blue" = c("Beautiful", "Vibrancy", NA),
    "Q3: Why did you choose this color? - Yellow" = c(NA, "Pretty", NA),
    check.names = FALSE)

我期望将数据转换为每行对应单个ID的单个颜色,并关联对应的Q2、Q3值的长格式,结果如下:

IDQ1Q2Q3
1PurpleAveragePretty
1RedNoPretty
1BlueYesBeautiful
2RedNoVibrancy
2BlueNoVibrancy
2YellowAveragePretty
3RedAverageBeautiful

我之前写的代码只能处理Q1和Q2的转换,无法扩展到Q3,代码如下:

pivot_longer(df, cols = -c(ID, Q1), values_to = "Q2") |>
    tidyr::separate_longer_delim(Q1, delim = stringr::regex(",\\s*")) |>
    filter(sub(".* ", "", name) == Q1) |>
    select(-name)

现在寻求可以同时支持Q2、Q3的宽转长解决方案。


内容的提问来源于stack exchange,提问作者Ekd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:07:35