正则表达式 – 将某些空格替换为制表符 – 分隔符
发布时间:2020-12-13 22:55:57 所属栏目:百科 来源:网络整理
导读:我有一个列data.frame,其中一些空格应该分隔一些只是一个空格. #input datadat - data.frame(x=c("A 2 2 textA1 textA2 Z1","B 4 1 textX1 textX2 textX3 Z2","C 3 5 textA1 Z3"))# x# 1 A 2 2 textA1 textA2 Z1# 2 B 4 1 textX1 textX2 textX3 Z2# 3 C 3 5
我有一个列data.frame,其中一些空格应该分隔一些只是一个空格.
#input data dat <- data.frame(x=c("A 2 2 textA1 textA2 Z1","B 4 1 textX1 textX2 textX3 Z2","C 3 5 textA1 Z3")) # x # 1 A 2 2 textA1 textA2 Z1 # 2 B 4 1 textX1 textX2 textX3 Z2 # 3 C 3 5 textA1 Z3 需要将其转换为5列data.frame: #expected output output <- read.table(text=" A 2 2 textA1 textA2 Z1 B 4 1 textX1 textX2 textX3 Z2 C 3 5 textA1 Z3",sep="t") # V1 V2 V3 V4 V5 # 1 A 2 2 textA1 textA2 Z1 # 2 B 4 1 textX1 textX2 textX3 Z2 # 3 C 3 5 textA1 Z3 本质上,需要将第1,第2,第3和最后一个空格更改为标签(或任何其他分隔符,如果它使编码更容易). 使用正则表达式没有给任何有用的东西… 注1:在实际数据中,我必须将第1,第3,…,第19和最后一个空格替换为标签.
尝试
v1 <- gsub("^([^ ]+)s+([^ ]+)s+([^ ]+)s+",'1,2,3,',dat$x) read.table(text=sub(' +(?=[^ ]+$)',v1,perl=TRUE),sep=",") # V1 V2 V3 V4 V5 #1 A 2 2 textA1 textA2 Z1 #2 B 4 1 textX1 textX2 textX3 Z2 #3 C 3 5 textA1 Z3 或者选自@ Tensibai的帖子 n <- 3 fpat <- function(n){ paste0('^((?:w+ ){',n,'})([w ]+)s+(w+)$') } read.table(text=gsub(fpat(n),"1'2' 3",dat$x,perl=TRUE)) # V1 V2 V3 V4 V5 #1 A 2 2 textA1 textA2 Z1 #2 B 4 1 textX1 textX2 textX3 Z2 #3 C 3 5 textA1 Z3 对于更多列, n <- 19 v1 <- "A 24 34343 212 zea4 2323 12343 111 dsds 134d 153xd 153xe 153de 153dd dd dees eese tees3 zee2 2353 23335 23353 ddfe 3133" read.table(text=gsub(fpat(n),sep='') # V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 #1 A 24 34343 212 zea4 2323 12343 111 dsds 134d 153xd 153xe 153de 153dd dd # V16 V17 V18 V19 V20 V21 #1 dees eese tees3 zee2 2353 23335 23353 ddfe 3133 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |