如何用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
相关产品推荐
相关产品推荐

