正则表达式 – 使用tidyr 将具有不均匀字符串长度的行拆分为R中
发布时间:2020-12-14 05:57:17 所属栏目:百科 来源:网络整理
导读:参见英文答案 Split data frame string column into multiple columns????????????????????????????????????15个 编辑:这被标记为重复.它不是.这里的问题不仅仅是将单个列拆分为多个列,因为我的单独代码会起作用.我的问题的要点是当行字符串具有不同长度的
参见英文答案 >
Split data frame string column into multiple columns????????????????????????????????????15个
编辑:这被标记为重复.它不是.这里的问题不仅仅是将单个列拆分为多个列,因为我的单独代码会起作用.我的问题的要点是当行字符串具有不同长度的列输出时拆分列. 我试图改变这个: data <- c("Place1-Place2-Place2-Place4-Place2-Place3-Place5","Place7-Place7-Place7-Place7-Place7-Place7-Place7-Place7","Place1-Place1-Place1-Place1-Place3-Place5","Place1-Place4-Place2-Place3-Place3-Place5-Place5","Place6-Place6","Place1-Place2-Place3-Place4") 进入: X1 X2 X3 X4 X5 X6 X7 X8 1 Place1 Place2 Place2 Place4 Place2 Place3 Place5 2 Place7 Place7 Place7 Place7 Place7 Place7 Place7 Place7 3 Place1 Place1 Place1 Place1 Place3 Place5 4 Place1 Place4 Place2 Place3 Place3 Place5 Place5 5 Place6 Place6 6 Place1 Place2 Place3 Place4 我尝试使用此代码使用tidyr的单独函数: library(data.table) data <- as.data.table(data) data_table <- tidyr::separate(data,data,sep="-",into = strsplit(data$data,"-"),fill = "right") 可悲的是我收到了这个错误: Warning message: Too many values at 3 locations: 1,2,4 我需要更改什么才能使其正常工作? 解决方法
您可以正确指定目标列:
library(tidyr) separate(DF,V1,paste0("X",1:8),sep="-") 这使: X1 X2 X3 X4 X5 X6 X7 X8 1 Place1 Place2 Place2 Place4 Place2 Place3 Place5 <NA> 2 Place7 Place7 Place7 Place7 Place7 Place7 Place7 Place7 3 Place1 Place1 Place1 Place1 Place3 Place5 <NA> <NA> 4 Place1 Place4 Place2 Place3 Place3 Place5 Place5 <NA> 5 Place6 Place6 <NA> <NA> <NA> <NA> <NA> <NA> 6 Place1 Place2 Place3 Place4 <NA> <NA> <NA> <NA> 如果您事先不知道需要多少目标列,可以使用: > max(sapply(strsplit(as.character(DF$V1),'-'),length)) [1] 8 提取最大数量的部件(因此是您需要的列数). 其他几种方法: splitstackshape: library(splitstackshape) cSplit(DF,"V1",direction = "wide") stringi: library(stringi) as.data.frame(stri_list2matrix(stri_split_fixed(DF$V1,byrow = TRUE)) data.table: library(data.table) setDT(DF)[,paste0("v",1:8) := tstrsplit(V1,"-")][,V1 := NULL][] stringr: library(stringr) as.data.frame(str_split_fixed(DF$V1,"-",8)) 这些都给出了类似的结果. 使用数据: DF <- data.frame(V1=c("Place1-Place2-Place2-Place4-Place2-Place3-Place5","Place1-Place2-Place3-Place4")) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |