'# 字符
找到以下这句话中,所有不重复字母的个数
The quick brown fox jumps over the lazy dog
- 首先,用tolower()或者toupper(),将全部字母换成小写或者全部换成大写
x <- 'The quick brown fox jumps over the lazy dog'
xlower <- tolower(x)
class(xlower) #xlower将x变成了小写的字符串变量
- 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()查看每一个变量出现的位置
- 将字母及出现的位置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
- 提取出不重复字母
#提取出所有出现的字母,等同于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)
注释:
- substr()语句,用来提取从指定开始位置到指定终止位置的字符串内容,
substr(文本,起始位置,终止位置) - regexpr(),返回的是与搜索词相匹配的第一个字符的位置
regexpr(‘搜索词’,搜索范围字符串)
字符处理函数
函数 | 作用 |
---|---|
readLines(),writeLines() | 按字符读取和保存文本文件 |
tolower(),toupper() | 大小写转换 |
nchar() | 字符个数 |
strsplit(),substr(),substring() | 字符串分割和截取 |
paste(),cat() | 字符连接 |
grep(),gsub(),sub(),chartr() | 查找和替换 |
table(),unique(),duplicated() | 计数,查重(不限于字符变量) |
str_locate() | 在stringr包里,用来定位 |