R语言pivot_longer转宽表异常:出现列't',如何修正得目标格式
宽格式转长格式:修正pivot_longer的正则匹配问题
原始宽格式数据
Year <- c(2020, 2021) Percent_a <- c(10,10) Percent_b <- c(12,10) Percent_c <- c(2,4) Percent_d <- c(4,5) df <- data.frame(Year, Percent_a, Percent_b, Percent_c, Percent_d)
目标长格式
Year Item Percent 2020 a 10 2020 b 12 2020 c 2 2020 d 4 2021 a 10 2021 b 10 2021 c 4 2021 d 5
问题分析
你尝试的代码中,names_pattern = "(.)_(.*)"仅匹配了列名的第一个字符(比如Percent_a中的P),导致.value只提取到单个字符,后续字符被错误拆分,最终出现了t列而非预期的Item列。
修正后的代码
library(tidyverse) df %>% pivot_longer( cols = -Year, names_to = c(".value", "Item"), names_pattern = "(Percent)_(.*)" ) -> df_longer
关键修正点
names_pattern = "(Percent)_(.*)":精准匹配列名结构,第一个捕获组(Percent)对应.value,确保值列名称保留为Percent;第二个捕获组(.*)提取_后的字母作为Item的内容。names_to = c(".value", "Item"):明确指定两个捕获组分别对应值列名称和Item列。
运行上述代码后,就能得到符合预期的长格式数据框。
内容的提问来源于stack exchange,提问作者Jenn0804
相关产品推荐
相关产品推荐

