基于多种分隔符拆分DataFrame列的错误排查与解决需求
解决tidyr::separate拆分names2/status2报错的问题
我帮你排查了下问题,发现根源是重复列名!你之前拆分pos2得到了Position列,拆分rating2的时候又用了Position作为其中一个新列名,这就导致df3里存在两个同名的Position列。虽然tbl_df允许重复列名,但tidyr的separate在处理这种数据结构时会出现混淆,从而抛出那个有点误导性的"Error: Data source must be a dictionary"报错。
下面是修正后的完整代码,一步步实现你的目标:
步骤1:加载数据并修正前期拆分的列名
首先用你提供的数据集初始化,然后拆分pos2和rating2时避免列名重复:
library(tidyr) library(stringr) library(dplyr) # 加载你的数据集 team_data <- structure(list(X1 = 2:6, names2 = c("Andre Callender Seton Hall Preparatory School (West Orange, NJ)", "Gosder Cherilus Somerville (Somerville, MA)", "Justin Bell Mount Vernon (Alexandria, VA)", "Tom Anevski Elder (Cincinnati, OH)", "Brad Mueller Mars Area (Mars, PA)"), pos2 = c("RB 5-10 185", "OT 6-7 270", "TE 6-3 250", "OT 6-5 265", "CB 6-0 170"), rating2 = c("0.8667 194 18 8", "0.8667 262 20 1", "0.8333 306 14 7", "0.8333 377 25 13", "0.8333 496 36 16"), status2 = c("Enrolled 6/30/2003", "Enrolled 6/30/2003", "Enrolled 6/30/2003", "Enrolled 6/30/2003", "Enrolled 6/30/2003"), team = c("Boston-College", "Boston-College", "Boston-College", "Boston-College", "Boston-College"), year = c(2003L, 2003L, 2003L, 2003L, 2003L)), .Names = c("X1", "names2", "pos2", "rating2", "status2", "team", "year"), row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame")) # 拆分pos2,正常执行 df2 <- separate(team_data, col = pos2, into = c("Position", "Height", "Weight"), sep = " ") # 修正rating2的拆分列名,避免和Position重复 df3 <- separate(df2, col = rating2, into = c("Rating", "National_Rank", "Position_Rank", "State_Rank"), sep = " ")
步骤2:拆分names2列
按你的需求,把names2拆分为姓名+学校、城市、州三部分:
df4 <- df3 %>% # 先按(拆分出姓名学校部分和带)的地理位置 separate(names2, into = c("Name_School", "Location"), sep = "\\(") %>% # 去掉地理位置里的) mutate(Location = str_remove(Location, "\\)")) %>% # 再把地理位置按逗号拆分城市和州 separate(Location, into = c("City", "State"), sep = ", ")
步骤3:拆分status2列
拆分出入学状态和入学日期:
df_final <- separate(df4, col = status2, into = c("Enroll_Status", "Date_Enrollment"), sep = " ")
最终结果
执行完后查看df_final,就能得到你需要的所有拆分后的数据,没有报错啦!
内容的提问来源于stack exchange,提问作者user2355903
相关产品推荐
相关产品推荐

