使用R tidyr::pivot_longer转换多列时如何拆分球员姓名与趋势值列
解决方法
你原代码的问题出在names_to和names_pattern的匹配逻辑有误:你现有列名的结构是[位置].[字段类型],第二个拆分项是字段属性(Player Name/Trend)而非球员名的取值,因此需要用.values参数指定将拆分出的属性作为新列名,对应值自动归入对应列即可实现需求。
运行代码
library(tidyr) library(dplyr) Data_trend <- data %>% tidyr::pivot_longer( cols = !`Trade Value`, names_to = c("Position", ".values"), names_pattern = "(.*)\\.(.*)" ) %>% # 按需重命名列、过滤空值行 dplyr::rename(`Trend Value` = Trend) %>% dplyr::filter(`Player Name` != "")
参数说明
names_to = c("Position", ".values"):表示列名拆分出的第一部分作为Position列的取值,第二部分作为新的列名,对应数值直接归入对应列,会自动生成Player Name和Trend两列names_pattern = "(.*)\\.(.*)":添加了转义符\\匹配列名中实际的点号,避免正则中.匹配任意字符的规则导致拆分错误- 后续的
rename是把Trend列重命名为你要求的Trend Value,filter是过滤无球员信息的空行,不需要可以直接删除这两行
内容的提问来源于stack exchange,提问作者melmo
相关产品推荐
相关产品推荐

