R语言字符串处理——一列中多种特殊字符的替换和拆分

删除一列中多种字符串

需求1

需要把图中的多位数字保留,去掉特殊符号和单个数字
经观察,除了多位数字外,其余数字左边为”:“,右边为”,“,根据这个规律进行正则替换。
R语言字符串处理——一列中多种特殊字符的替换和拆分_第1张图片

代码

library(dplyr)
library(tidyr)
dat <- read.csv("data.csv")
##不分列直接替换
wm <- c("\\{",":[0-9]}",":[0-9],","\"")
datt <- as.data.frame(sapply(dat, function(x) gsub(paste(wm,collapse = "|"), " ",x)))

结果

R语言字符串处理——一列中多种特殊字符的替换和拆分_第2张图片

需求2

当想要分列时,就需要先按符号分列,再替换。列数需要提前确定。

代码

library(dplyr)
library(tidyr)
dat <- read.csv("data.csv")
## 建立空矩阵
count_dat <- matrix(NA, nrow = nrow(dat),1)
## 统计每行包含":"符号个数,确定拆分列数
for (i in 1:nrow(dat)) {
  temp <- dat[i,]
  count_dat[i,1] <- str_count(temp,":")
}
max(count_dat)  # 328
## 按:拆分列
datn <- str_split_fixed(dat$cleanaggregation,":",max(count_dat)+1) %>%data.frame()
## 删除符号
wordstoremove <- c("\\{","[0-9]}","[0-9],","\"")
datnn <- as.data.frame(sapply(datn, function(x) gsub(paste(wordstoremove,collapse = "|"),"",x)))

结果

R语言字符串处理——一列中多种特殊字符的替换和拆分_第3张图片

需求3

想要把每行的数字都合并为一列

################################################
##不分列直接替换
wm <- c("\\{",":[0-9]}",":[0-9],","\"")
datt <- as.data.frame(sapply(dat, function(x) gsub(paste(wm,collapse = "|"), " ",x)))

##############################################
# 就比如,第一行有3个数字,第2个数字放到第2行,第3个数字放到第3行,这样顺延

dattt <- datt %>% as_tibble() %>%
  separate_rows(cleanaggregation, sep = " ")
## 删除只有” “的行
narows <- which(dattt=="")
dattt <- dattt[-narows,]

结果

R语言字符串处理——一列中多种特殊字符的替换和拆分_第4张图片

以上就是不规整数据的字符串替换整理。

你可能感兴趣的:(r语言,开发语言)