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

如何用dplyr的pivot_longer结合正则实现宽表转长表并拆分列名

错误原因

names_pattern参数要求正则表达式的捕获组数量和names_to指定的列数严格对应,你之前写的.-.没有定义捕获组,同时你原数据的列是用点号分隔流入流出端,不是横杠,所以正则匹配逻辑也不对。

调整后可直接运行的代码

首先确保已加载tidyverse包:

library(tidyverse)

转换代码:

df %>% 
  pivot_longer(cols = A.Y:C.W, 
               names_to = c("inflow", "outflow"), 
               names_pattern = "(.*)\\.(.*)", # 两个捕获组分别匹配点号前后的流入、流出端字符
               values_to = "status") %>%
  filter(status == 1) %>% # 过滤掉未生效的连接
  select(-status) %>%
  complete(id = df$id, fill = list(inflow = "", outflow = "")) # 补全无有效连接的id,对应字段设为空值

运行上述代码得到的输出和你需要的df.out完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:36:08