拆分合并数据至列:R语言DataFrame变量计数列规整问题
解决方案
直接用tidyverse工具链就能高效解决这个问题,不用写复杂的循环和case_when,步骤如下:
拆分行与键值对
先用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)转换为宽格式
用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
相关产品推荐
相关产品推荐

