R入门(八)--- 字符

'# 字符
找到以下这句话中,所有不重复字母的个数

The quick brown fox jumps over the lazy dog

  1. 首先,用tolower()或者toupper(),将全部字母换成小写或者全部换成大写
x <- 'The quick brown fox jumps over the lazy dog'
xlower <- tolower(x)
class(xlower) #xlower将x变成了小写的字符串变量
  1. length()用来查看元素的个数,nchar()查看字符串的长度,x里只包含1个元素,这个元素包含的字符数是43
> xlower
[1] "the quick brown fox jumps over the lazy dog"
> length(x)
[1] 1
> nchar(x)
[1] 43

3.将字符串分割,strsplit()将字符串拆分成单个字符

> xsingle <- strsplit(xlower,'')[[1]]
> nchar(xsingle)
 [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 > length(xsingle)
[1] 43

为什么strsplit(xlower,’’)[[1]]后面是[[1]]?
我试过把[[1]]去掉,但是出现的结果,和想象中的不一样

4.查看第一个字符出现的位置
grep(),全称global regular expression print.正则表达式,找到x在data中出现过的位置.

> grep(xsingle[1],xsingle) #在第一位和第32位中出现
[1]  1 32
> for (i in 1:length(xsingle))  print(grep(xsingle[i],xsingle))  #grep()查看每一个变量出现的位置
  1. 将字母及出现的位置paste在一起
for (i in 1:length(xsingle))  print(paste(xsingle[i],grep(xsingle[i],xsingle)))
#等同于
for (i in 1:length(xsingle))  print(cat(xsingle[i],grep(xsingle[i],xsingle)))
#cat() concatenate的缩写,字母只出现一次.
#超越循环我们一起飞
sapply(xsingle,function(x) grep(x, xsingle))
#计算每个元素出现的次数
> table(xsingle)
xsingle
  a b c d e f g h i j k l m n o p q r s t u v w x y z 
8 1 1 1 1 3 1 1 2 1 1 1 1 1 1 4 1 1 2 1 2 2 1 1 1 1 1 
> duplicated(xsingle)   #字母第二次出现就返回TRUE
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
[16]  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE  TRUE
[31]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE
  1. 提取出不重复字母
#提取出所有出现的字母,等同于unique()
xsingle[!duplicated(xsingle)]
unique(xsingle)
length(unique(xsingle)) #除去空格外,出现过的字母字数为26

作业10.1 'Pack my box with five dozen liquor jugs’找到这句话中重复的字母以及字数
(我做的看错题了,可以忽略,直接看参考答案)

y <- 'Pack my box with five dozen liquor jugs'
ylower <- tolower(y)
ysplit <- strsplit(ylower,'')[[1]]
nchar(ysplit)
length(ysplit)
length(unique(ysplit))

10.1参考答案

p1 <- 'Pack my box with five dozen liquor jugs'
p1 <- tolower(p1)
dup1 <- table(strsplit(gsub(' ','',p1),''))  #gsub() 替换函数,将空格替换成无空格
dup1[dup1>1]

千字文查重

#从网上的服务器上,把文件下载下来,并且保存为qianziwen.txt文件
download.file(url = 'http://dapengde.com/r4rookies/qianziwen.txt',
              destfile = 'F:/R lab/学R/r4r/qianziwen.txt')
  #同理,我也看到该目录下也有其他文件,下载试试
download.file(url = 'http://dapengde.com/r4rookies/figren.zip',
              destfile = 'F:/R lab/学R/r4r/figren.zip')
#readLines()读取文本文件
qzw <- readLines('F:/R lab/学R/r4r/qianziwen.txt')
class(qzw)
length(qzw)
nchar(qzw)
qzwmerged <- paste(qzw,collapse = '')  #将千字文合并成一个向量,换行符用无空格代替
nchar(qzwmerged) #包括空格在内字符有1125个
qzwmerged <- gsub(' ','',qzwmerged)
nchar(qzwmerged) #去掉空格后,纯字有1000个
qzwsingle <- strsplit(qzwmerged,'')[[1]] #将千字文变成一千的字,打散
chardup <- qzwsingle[duplicated(qzwsingle)] #将重复字找出来,duplicated返回的是逻辑向量,TRUE 和FALSE
for (i in chardup) print(paste(i,grep(i,qzw,value = TRUE))) #找到重复字在原千字文中出现的句子

小故事,我就不介绍了,唉,我是一个没有温度的人诺.

笔记整理

笔记是大鹏上传到网站上的,每本书的笔记占四行,分别是书名,书中位置笔记时间,空行,笔记内容
当前任务是生成表格,第一列是书名,第二列是笔记内容
部分

  • 笔记位置:’- Highlight ‘,占据了12个字符,从第13个字符开始算起,到’ Added on’减去3个字符为至
  • 笔记时间:'Added on '开始第10个字符
#笔记整理
 #下载文件,并读取文件
download.file(url = 'http://dapengde.com/r4rookies/kdclip.txt',
              destfile ='F:/R lab/学R/r4r/kdclip.txt' )
aa <- readLines('F:/R lab/学R/r4r/kdclip.txt', encoding = 'UTF-8')
 #文件行数
length.aa <- length(aa)
 ##1. 提取出标题行
title <- aa[c(seq(1,length.aa,by = 5))]
 ##对所有标题按字母排序
title.o <- order(title) #找顺序,返回的是按顺序排列,原数据的占位
title <- title[title.o] #按照顺序排列
 ##2. 摘取笔记的高亮内容,存在highlight向量里,按照title.o中的顺序排列
highlight <- aa[c(seq(4,length.aa,by = 5))][title.o]
 #将两个向量保存在一个数据框中,并保存在硬盘里,可以用Excel打开,分隔符sep参数为\t
kn <- data.frame(Title = title, Highlight = highlight)
write.table(kn,'F:/R lab/学R/r4r/kn.txt',
            sep = '\t',row.names = FALSE)
#添加笔记位置和时间
location <- aa[c(seq(2,length.aa,by = 5))][title.o]
location[1]
time.aa <- substr(location,
                  (regexpr(' Added on ', location) + 10),
                  nchar(location))
loc <- substr(
  location,13,
  regexpr(' Added on ',location)-3)
kn <- data.frame(Title = title, Highlight = highlight,
                 Loc = loc, Time = time.aa)
write.table(kn,'F:/R lab/学R/r4r/kn.txt',
            sep = '\t',row.names = FALSE)

注释:

  1. substr()语句,用来提取从指定开始位置到指定终止位置的字符串内容,
    substr(文本,起始位置,终止位置)
  2. regexpr(),返回的是与搜索词相匹配的第一个字符的位置
    regexpr(‘搜索词’,搜索范围字符串)

字符处理函数

函数作用
readLines(),writeLines()按字符读取和保存文本文件
tolower(),toupper()大小写转换
nchar()字符个数
strsplit(),substr(),substring()字符串分割和截取
paste(),cat()字符连接
grep(),gsub(),sub(),chartr()查找和替换
table(),unique(),duplicated()计数,查重(不限于字符变量)
str_locate()在stringr包里,用来定位
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值