基于字符类型合并DataFrame列,提取NBA球员姓名与薪资字段
处理思路
利用正则表达式区分字符内容类型,逐行提取纯字母的单元格拼接为球员姓名,提取纯数字的单元格作为薪资即可完成转换。
tidyverse 实现方案
# 加载依赖包 library(tidyverse) # df为你导入的原始DataFrame result <- df %>% rowwise() %>% mutate( # 筛选所有仅含字母的单元格拼接为姓名 name = paste(c_across(everything())[str_detect(c_across(everything()), "^[A-Za-z]+$")], collapse = " "), # 筛选所有仅含数字的单元格转为薪资数值 salary = as.numeric(c_across(everything())[str_detect(c_across(everything()), "^\\d+$")]) ) %>% ungroup() %>% # 仅保留目标两列 select(name, salary)
base R 实现方案
result <- data.frame( name = character(nrow(df)), salary = numeric(nrow(df)), stringsAsFactors = FALSE ) for (i in seq_len(nrow(df))) { row_content <- unlist(df[i, ]) # 提取姓名组成部分 name_parts <- row_content[grepl("^[A-Za-z]+$", row_content)] result$name[i] <- paste(name_parts, collapse = " ") # 提取薪资 salary_val <- row_content[grepl("^\\d+$", row_content)] result$salary[i] <- as.numeric(salary_val) }
特殊情况兼容说明
如果数据中存在带缩写点、连字符的球员姓名,可将匹配姓名的正则调整为^[A-Za-z\\.\\-]+$即可兼容这类场景。
内容的提问来源于stack exchange,提问作者TomasC8
相关产品推荐
相关产品推荐

