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

拆分合并数据至列:R语言DataFrame变量计数列规整问题

解决方案

直接用tidyverse工具链就能高效解决这个问题,不用写复杂的循环和case_when,步骤如下:

  1. 拆分行与键值对
    先用separate_rows把逗号分隔的每组「变量:计数」拆成单独的行,再用separate把变量名和计数拆成两列:

    library(tidyverse)
    
    df1 <- data.frame(A = c('Var1:1', 'Var1:2,Var2:1', 'Var3:2,Var2:1'))
    
    df_processed <- df1 %>%
      mutate(row_id = row_number()) %>%  # 保留原始行号,避免合并时丢失对应关系
      separate_rows(A, sep = ",") %>%
      separate(A, into = c("var", "count"), sep = ":", convert = TRUE)
    
  2. 转换为宽格式
    用pivot_wider把变量名转成列,计数作为对应的值,缺失的位置可以用values_fill填充为0(如果需要):

    df_final <- df_processed %>%
      pivot_wider(
        id_cols = row_id,
        names_from = var,
        values_from = count,
        values_fill = 0  # 没有对应计数的变量填0,也可以设为NA
      ) %>%
      select(-row_id)  # 移除临时行号列
    

运行后得到的df_final就是你要的格式:

Var1 Var2 Var3
1    1    0    0
2    2    1    0
3    0    1    2

为什么你的case_when循环没生效?

你之前的问题大概率是因为拆分后生成的多列(比如X1、X2、X3...)没有被全部遍历处理,case_when只针对单列判断,没法自动识别所有奇数列的变量和偶数列的计数。而上面的方法先把所有键值对统一整理成两列,再转宽格式,逻辑更清晰也不容易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:25:23