R语言字符串处理①R语言字符串合并与拆分

R基础字符串处理函数

nchar paste strsplit tolower toupper casefold chartr gsub sub substr substring grep grepl regexpr

R包stringr

字符串处理学习思路

  • 拼接 对应拼接,如 (‘a’,’b’)+(‘c’,’d’) → (‘ac’,’bd’) 多拼为一,如 (‘a’,’cd’,’m’) → (‘acdm’)
  • 拆分(根据pattern) 如’a.b.c.d’ → (‘a’,’b’,’c’,’d’)
  • 替换 根据位置,如字符串第3位到第5位换掉 根据pattern,如把所有’s’换成’c’
  • 提取 根据位置,如提取字符串第3位到第5位 根据pattern,如提取所有数字
library(DiagrammeR)
grViz("
      digraph boxes_and_circles {
      graph [rankdir = LR]
      字符处理需求->{拼接 拆分(根据pattern) 替换 提取}
      拼接->{多拼为一 对应拼接}
      替换->{根据位置 根据pattern(正则表达式)}
      提取->{根据位置 根据pattern(正则表达式)}}")

R语言字符串合并与拆分

针对向量

strsplit #针对字符串向量(拆分) str_split #针对字符串向量(拆分)stringr包内函数 paste #针对向量合并

针对数据框

unite #合并数据框中的某几列 separate #将数据框中某一列按照某种模式拆分成几列

a <- c("2016-2-7","2016-3-8","2016-4-9","2017-5-10")
b <- c("ahdbca","bhdafb")

nchar(a) # 计算字符串中字符个数

paste(a,b,sep="--")  # 对应拼接
paste(a,collapse ="  ") # 拼接成一个字符串
paste(a,b,sep="--",collapse ="  ")  # 两步合成一步

strsplit(a,split="-") # 拆分
strsplit(a,split="-\\d-",fixed=F) # 使用正则表达式拆分
# 使用|或来按照两种形式拆分
q <- c("a-b.c-d")
strsplit(q,"\\.|-") # "a" "b" "c" "d"

# 改变字符串
# 大小写转换
(c <- toupper(b))
tolower(c)
casefold(c)
casefold(b,upper=T)

chartr("ab","mn",b) # 对应替换,不支持正则表达式
gsub(pattern="-\\d-",replacement="B",a) # 搜索匹配的内容替换全部
sub(pattern="-",replacement="B",a) # 搜索匹配的内容,只替换第一个
library(DiagrammeR)
grViz("
      digraph boxes_and_circles {
      graph [rankdir = LR]
      字符处理需求->{拼接 拆分(根据pattern) 替换 提取}
      拼接->{多拼为一 对应拼接}
      替换->{根据位置 根据pattern(正则表达式)}
      提取->{根据位置 根据pattern(正则表达式)}}")


library(dplyr)
library(stringr)
library(tidyr)
myyear<-sprintf("20%02d",sample(0:17,10))
mymonth<-sprintf("%02d",sample(0:12,10))
myday<-sprintf("%02d",sample(0:31,10))
myyear;mymonth;myday

full<-paste(myyear,mymonth,myday,sep = "-");full  



myyear1=mymonth1=myday1=NULL
for( i in 1:length(full)){
  myyear1[i]<-strsplit(full[i],"-")[[1]][1]
  mymonth1[i]<-strsplit(full[i],"-")[[1]][2]
  myday1[i]<-strsplit(full[i],"-")[[1]][3]
}
myyear1;mymonth1;myday1





myyear1=mymonth1=myday1=NULL
for( i in 1:length(full)){
  myyear1[i]<-str_split(full[i],"-")[[1]][1]
  mymonth1[i]<-str_split(full[i],"-")[[1]][2]
  myday1[i]<-str_split(full[i],"-")[[1]][3]
}






mydata1<-unite(mydata,col="datetime",
               c("myyear","mymonth","myday"),
               sep="-",remove=FALSE);mydata1



mydata2<-unite(mydata1,col="datetime1",
               c("myyear","mymonth","myday"),
               sep="-",remove=FALSE);mydata2

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

P1182 数列分段Section II

题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小。 关于最大值最小: 例如一数列4 2 4...

28380
来自专栏kalifaの日々

C++构造无向图&求最短路径源码

用vector<edge> es[MAX]表示点,每个点队列里放着点的相邻边和到边的距离。 以下源码经过测试可运行 #include <iostream> #i...

32350
来自专栏CDA数据分析师

excel公式中14种运算符,帮你整理齐了

文 | 赵志东 运算符是公式中最主要的组成部分,包括数学运算符、逻辑运算符和连接运算符等,下面我们就全面学习一下excel公式里的运算符。 一、运算符 1、 数...

21450
来自专栏Python小屋

Python从序列中选择k个不重复元素

集合中的元素不允许重复,Python集合的内部实现为此做了大量相应的优化,判断集合中是否包含某元素时比列表速度快很多。下面的代码用于返回指定范围内一定数量的不重...

35360
来自专栏Java Web

最大子段和问题

问题描述: 给定长度为n的整数序列,a[1...n], 求[1,n]某个子区间[i , j]使得a[i]+…+a[j]和最大,或者求出最大的这个和。如果该序列的...

42650
来自专栏ACM算法日常

leetcode题解 | 78. 子集

这个题目很容易想到使用DFS的方式来解决,因为组合的题容易产生转移方程,这样也是没有什么问题的。

16630
来自专栏决胜机器学习

从机器学习学python(一) ——numpy中的shape、tile、argsort

从机器学习学python(一)——numpy中的shape、tile、argsort (原创内容,转载请注明来源,谢谢) 注:本系列是我在学习机器学习过程中,...

39640
来自专栏kalifaの日々

POJ2431-最优队列(最小堆)解法

这道题有一个坑,就是给出的加油站到终点的距离不一定是降序排列好了的。 所以得到input之后要先对数据进行排序。我直接用了#include<algorithm>...

35870
来自专栏西枫里博客

Python学习笔记十(lambda表达式)

lambda是一个表达式,并不像def一样定义一个复杂的函数,很简洁的一个代码块。通常被用来创建匿名函数。lambda的好处也很明显,首先省去了函数的定义过程,...

9120
来自专栏编程

从机器学习学python(一)——numpy中的shape、tile、argsort

从机器学习学python(一) ——numpy中的shape、tile、argsort (原创内容,转载请注明来源,谢谢) 注:本系列是我在学习机器学习过程中,...

20350

扫码关注云+社区

领取腾讯云代金券