R语言编程进阶

我记了一个R视频笔记-提示我该学哪些

2019-11-21  本文已影响0人  小梦游仙境

1.R语言、Rstudio简介

image-20191002135537331

Task views 比如我想做生存分析 但是我不知道生存分析哪些包可以做,这时我就可以在这里面找

向下拉可以看到有很多包,可以看到有的包后面带有core字样,这种为核心包

展示这个包的函数的用法及

image-20191002150829525

r-bolggers

Rdocumentation:包含cran、bioconductor 、github

中文网站:统计之都(可在网站中提问)

2.R包的安装、向量

3.数值型、逻辑型向量

4.逻辑表达式&字符串向量

5.因子型变量

6.列表&矩阵

7.数组&初识数据框

8.数据框

9.数据框的基本操作

image-20191003122444068 image-20191003122456621

下面是3中切分方式

10.条件与循环

image-20191003130946507

11.自定义函数&数据读取

image-20191004094417173

12.数据的读取与写出

13.数据排序与长宽型数据转换

14.变量的因子化

15.apply函数家族

16.数据汇总函数

17.plyr包

18.dplyr包

19.data.table

20.缺失值的识别与处理(1)

21.缺失值的识别与处理(2)

rm(list = ls())
library(mlbench)
data('BostonHousing')
head(BostonHousing)

original_data<-BostonHousing
set.seed(2017)
BostonHousing[sample(1:nrow(BostonHousing),80),'rad']<-NA #生成缺失值
BostonHousing[sample(1:nrow(BostonHousing),80),'PTRATION']<-NA
library(mice)
md.pattern(BostonHousing) 

library(Hmisc)

im_mean<-impute(BostonHousing$ptratio,median)
head(im_mean)
BostonHousing$ptratio<-NULL


mice_mod<-mice(BostonHousing[,!names(BostonHousing)%in% 'medv'],method = 'rf')#rf是随机森林的缩写,不要把medv这个变量放进来,接下来做回归分析把缺失值的作为因变量,其他不含缺失值变量的作为自变量,建立一种模型来进行回归,对因变量进行估计,最后预测那些缺失值是多少。现在ptratio因为含有缺失值,就是这里面的因变量
mice_output<-complete(mice_mod)

actuals <- original_data$rad[is.na(BostonHousing$rad)]

predics<-mice_output[is.na(BostonHousing$rad)]

mean(actuals!=predicts)


library(VIM)
data('airquality')
md.pattern(airquality)

aggr_plot<-aggr(airquality,col=c('red','green'),numbers=TRUE,sortVars = TRUE,labels = names(airquality),cex.axis = 0.7,gap = 3) #numbers真是把缺失值和不缺失值的比例显示出来,sortVars是根据缺失值的多少进行排序

#另一个可视化的函数

marginplot(airquality[1:2])
#把因变量的值当成未知,用自变量对其预测

data(sleep)
head(sleep)
sleepIm<-regressionImp(Sleep+Gest+Span+Dream+NonD~BodyWgt+BrainWgt,data=sleep)
head(sleepIm)
#因变量放在公式的左边,就是在~左边。得到的TRUE表示之前此处是缺失值
#因变量有连续性变量和离散型变量,如果知道左侧的因变量都是分类变量面就可以用family='logical',如果不知道,就用family='auto'
sleepIm<-regressionImp(Sleep+Gest+Span+Dream+NonD~BodyWgt+BrainWgt,data=sleep,family='auto')
head(sleepIm)

22.异常值和重复值的处理

image-20191005164148850

23.字符串的处理

> x<-c('fudan','jiaoda')
> nchar(x)
[1] 5 6
> length(x)
[1] 2
> toupper('shengxinjinengshu')
[1] "SHENGXINJINENGSHU"
> tolower('SHENGXINJINENGSHU')
[1] "shengxinjinengshu"

> stringa<-LETTERS[1:5]
> STRINGB<-1:5
> paste(stringa,STRINGB,sep = '-')
[1] "A-1" "B-2" "C-3" "D-4" "E-5"
> paste(stringa,STRINGB,collapse = '-')
[1] "A 1-B 2-C 3-D 4-E 5"
 
> paste0(stringa,STRINGB)
[1] "A1" "B2" "C3" "D4" "E5"
> paste0(stringa,STRINGB,sep = '-')
[1] "A1-" "B2-" "C3-" "D4-" "E5-"
> paste0(stringa,STRINGB,collapse  = '-')
[1] "A1-B2-C3-D4-E5"

> stringC<-paste(stringa,STRINGB,sep = '/') 
> stringC
[1] "A/1" "B/2" "C/3" "D/4" "E/5"
> strsplit(stringC,split = '/')
[[1]]
[1] "A" "1"

[[2]]
[1] "B" "2"

[[3]]
[1] "C" "3"

[[4]]
[1] "D" "4"

[[5]]
[1] "E" "5"

> stringd<-c('sheng','xin','ji','neng','shu')
> sub_str<-substr(stringd,start = 2,stop = 4) 
> sub_str
[1] "hen" "in"  "i"   "eng" "hu" 
> substr(stringd,start = 2,stop = 4)<-'aaa'
> stringd
[1] "saaag" "xaa"   "ja"    "naaa"  "saa"   
> my_string <- c('above','about','abrotion','cab') 
> grep('ab\\b',my_string,value = T)
[1] "cab"
> grep('\\bab',my_string,value = T)
[1] "above"    "about"    "abrotion"
> money<-c('$1888','$2888','$3888') 
> as.numeric(money)
[1] NA NA NA
Warning message:
强制改变过程中产生了NA  
> gsub('\\$',replacement = '',money)
[1] "1888" "2888" "3888"
> sub('\\$',replacement = '',money)
[1] "1888" "2888" "3888"
> money2<-c('$1888 $2888 $3888')
> sub('\\$',replacement = '',money2)
[1] "1888 $2888 $3888"
> test_string<- c('happy','apple','application','apolitic') 
> regexpr('pp',test_string)
[1]  3  2  2 -1
attr(,"match.length")
[1]  2  2  2 -1
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE
> test_string[regexpr('pp',test_string)>0] #不匹配的就是-1
[1] "happy"       "apple"       "application"
> agrep()#匹配英美式
Error in agrep() : 缺少参数"pattern",也没有缺省值
> string1<-c('I need a favour','my favorite report','you made an error')
> agrep('favor',string1)
[1] 1 2
image-20191005173203407 image-20191005173247442 image-20191005173629633 image-20191005173834186 image-20191005173940484 image-20191005174430380 image-20191005174532917

24.正则表达式

. 默认情况下, 句点匹配除新行符 (rn) 序列外的任何单个字符,例如, ab. 可以匹配 abc 和 abz 以及 ab_.
***** 星号匹配零个或多个前面的字符。例如, a* 可以匹配 ab 和 aaab. 它还可以匹配完全不包含 "a" 的任意字符串的开始处.通配符: 句点星号模式 .* 是匹配范围最广的模式之一, 因为它可以匹配零个或多个 任意 字符 (除了新行符: r 和n). 例如, abc.*123 可以匹配 abcAnything123, 也能匹配 abc123.
? 问号匹配零或一个前面的字符,可以理解为 "前面的那项是可选的". 例如, colou?r 可以匹配 color 和 colour, 因为 "u" 是可选的.
+ 加号匹配一个或多个前面的字符,例如 a+ 可以匹配 ab 和 aaab. 但与 a+a? 不同的是, 模式 a+ 不会匹配开始处没有 "a" 的字符串.
{min,max} 匹配出现次数介于 minmax 的前面的字符, 例如, a{1,2} 可以匹配 ab 但只匹配 aaab 中的前两个 a.此外, {3} 表示准确匹配 3 次, 而 {3,} 则表示匹配 3 次或更多. 注: 且第一个必须小于等于第二个.
[...] 字符类: 方括号把一列字符或一个范围括在了一起 (或两者). 例如, [abc] 表示 "a, b 或 c 的中任何一个字符". 使用破折号来创建范围; 例如, [a-z] 表示 "在小写字母 a 和 z (包含的) 之间的任何一个字符". 列表和范围可以组合在一起; 例如 [a-zA-Z0-9_] 表示 "字母, 数字或下划线中的任何一个字符".字符类后面可以使用 *, ?, + 或 {min,max} 进行限定. 例如, [0-9]+ 匹配一个或多个任意数字; 因此它可以匹配 xyz123 但不会匹配 abcxyz.
[^...] 匹配 在类中的任何一个字符. 例如, [^/]* 匹配零个或多个 不是 正斜杠的任意字符, 例如 , [^0-9xyz] 匹配既不是数字也不是 x, y 或 z 的任何一个字符.
\d 匹配任意一个数字 (相当于类 [0-9]). 相反地,大写的\D表示“任意的 数字字符”。 例如, [\d.-] 表示 "任何数字, 句点或负号".
\s 匹配任意单个空白字符 , 主要是==空格, tab 和新行符 (r 和n==). 相反地, 大写的 \S 表示 "任何 空白字符".
\w 匹配任何==单个 "单词"== 字符, 即==字母, 数字或下划线==. 这等同于 [a-zA-Z0-9_]. 相反地, 大写的 \W 表示 "任何 单词字符".
> ###1.原义表达式
> mystring1<- c('apple','orange')
> grep('p',string1)
[1] 2

> ###2.转移表达式
> mystring2<-c('shuda','.dfs','-dsfd')
> grep('.',mysting2) #.作为pattern的话,是一个转义表达式,代表所有字符,包括它自己
[1] 1 2 3

> mystring3<-c('9aee','fese7','10000')
> grep('[7-9]',mystring3)
[1] 1 2
> 
> grep('[0-1]',mystring3)
[1] 3
> grep('[0-6]',mystring3)
[1] 3

> mystring4<-c('apple','application','abb')
> grep('^ap',mystring4)
[1] 1 2

> mystring3<-c('9aee','fese7','10000')
>
> grep('[^0-1]',mystring3)
[1] 1 2
> grep('[^7-9]',mystring3)
[1] 1 2 3
> grep('[^2-6]',mystring3)
[1] 1 2 3
> mystring3<-c('9aee','fese7','50000')
> grep('[^0-1]',mystring3)
[1] 1 2 3

> mystring6<-c('1220','2267','2226','12333')
> grep('2{2,3}',mystring6) #重复2到3次
[1] 1 2 3
> grep('2{2,}',mystring6) #重复大于等于2次的返回
[1] 1 2 3

> mystring7<-c('food','foot','foul','fans')
> grep('fo{1,}',mystring7)#只对o起作用
[1] 1 2 3
> grep('fo+',mystring7)
[1] 1 2 3
> grep('(fo){1,}',mystring7)
[1] 1 2 3

> mystring8<-c('kobe','messi','neymar')
> grep('^k|^m',mystring8)
[1] 1 2

> mystring9<-c('active','positive','negative','love')
> grep('ive$',mystring9)
[1] 1 2 3
> grep('ive\\b',mystring9) #\\b:boundry
[1] 1 2 3

> ###保义符
> mystring10<-c('ac^bb','^df')
> grep('\\^',mystring10)
[1] 1 2

25.stringr&stringi包

> ###stringr
> library(stringr)
> library(stringi)
> str_c('a','b',sep = '-') #与paste类似
[1] "a-b"
> str_length() #nchar()
Error in stri_length(string) : 缺少参数"string",也没有缺省值

> jns <- 'sheng xin ji neng shu'
> str_sub(jns,c(1,4,8),c(2,6,11)) #与substr()类似
[1] "sh"   "ng "  "in j"
> str_sub(jns,1,1)<-'S'
> jns
[1] "Sheng xin ji neng shu"

> fruit<-c('apple','pear','banana')
> str_dup(fruit,2)
[1] "appleapple"   "pearpear"     "bananabanana"
> str_dup(fruit,2:4)
[1] "appleapple"               "pearpearpear"            
[3] "bananabananabananabanana"
> str_dup(fruit,2:5) #循环补齐
[1] "appleapple"                "pearpearpear"             
[3] "bananabananabananabanana"  "appleappleappleappleapple"
Warning message:
In stri_dup(string, times) :
  longer object length is not a multiple of shorter object length

> string<- ' Eternal love for jns '
> str_trim(string ,side = 'both')
[1] "Eternal love for jns"

> phones<- c(' 219 733 8965','329-356-765 ','banana','456 789 234','764 126 893','apple','233.456.7656 ','333 555 7777','123 234 3456 and 456 567 6789','Work:333-666-8888','$1000','Home: 543.355.6790')
> str_extract(phones,'([1-9][0-9]{2})[- .]([0-9]{3})[- .]([0-9]{4})') #{}内是重复几次
 [1] "219 733 8965" NA             NA             NA            
 [5] NA             NA             "233.456.7656" "333 555 7777"
 [9] "123 234 3456" "333-666-8888" NA             "543.355.6790"
> str_extract(phones,'([1-9][0-9]{2})[- .]([0-9]{3})[- .]([0-9]{3,})') #{}内是重复几次
 [1] "219 733 8965" "329-356-765"  NA             "456 789 234" 
 [5] "764 126 893"  NA             "233.456.7656" "333 555 7777"
 [9] "123 234 3456" "333-666-8888" NA             "543.355.6790"
> 
> fruits<-c('one apple','two pears','three bananas')
> str_replace(fruits,'[aeiou]','-')
[1] "-ne apple"     "tw- pears"     "thr-e bananas"

> ###stringi
> stri_join(1:7,letters[1:7], sep='-')
[1] "1-a" "2-b" "3-c" "4-d" "5-e" "6-f" "7-g"
> stri_join(1:7,letters[1:7], collapse = '-')
[1] "1a-2b-3c-4d-5e-6f-7g"

> stri_cmp_eq('AB','aB')
[1] FALSE
> stri_cmp_neq('AB','aB')
[1] TRUE

> stri_cmp_lt('121','221')#不是当成数值比较,而是当成字符串比较,前者小于后者
[1] TRUE

> stri_cmp_lt('a121','b221')
[1] TRUE
> stri_cmp_lt('c121','b221')
[1] FALSE
> stri_cmp_gt('e121','b221')
[1] TRUE
> stri_cmp_gt('e321','b221')
[1] TRUE

> language<-c('Python','R','PHP','Ruby','Java','JavaScript','C','Oracle','C++','C#','Spark','GO','Room','Good','Pathon','ScriptJava','R2R','C+','C*')
> stri_count(language,fixed = 'R')
 [1] 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 2 0 0
> stri_count(language,regex = '^J')
 [1] 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0

> test<-'The\u00a0aboue-mentioned   features are very useful.  Warm thank to you.   Tomorrow is a, new $# day##'
> stri_count_boundaries(test,type='word')
[1] 44
> stri_count_boundaries(test,type='sentence')
[1] 3
> stri_count_boundaries(test,type='character')
[1] 97

> stri_dup(c('abc','pqrst'),c(4,2))
[1] "abcabcabcabc" "pqrstpqrst"  

> stri_duplicated(c('a','b','a',NA,'a',NA))
[1] FALSE FALSE  TRUE FALSE  TRUE  TRUE

> stri_duplicated(c('a','b','a',NA,'a',NA),fromLast = T) #从后往前判断
[1]  TRUE FALSE  TRUE  TRUE FALSE FALSE

> stri_duplicated_any(c('a','b','a',NA,'a',NA))
[1] 3

> stri_detect_fixed(c('stringi R','Rexamine','123'),c('i','R','0'))
[1]  TRUE  TRUE FALSE

> stri_detect_regex(c('apple','application','append','ape'),'^ap')
[1] TRUE TRUE TRUE TRUE
> 
> stri_detect_regex(c('apple','application','append','ape'),'^app')
[1]  TRUE  TRUE  TRUE FALSE

> stri_detect_regex(c('apple','application','append','ape'),'e\\b')
[1]  TRUE FALSE FALSE  TRUE

> stri_detect_regex(c('APPLE','application','appEND','ape'),'e\\b',case_insensitive = TRUE) #这个case_insensitive(忽略大小写)为什么不能补齐呢?
[1]  TRUE FALSE FALSE  TRUE

> stri_startswith_fixed(c('a1','a2','b3','a4','c5'),'a')
[1]  TRUE  TRUE FALSE  TRUE FALSE

> stri_startswith_fixed(c('a1','a2','b3','a4','c5'),'a1')
[1]  TRUE FALSE FALSE FALSE FALSE

> stri_startswith_fixed(c('abada','aabadc','abaee'),'ba',from = 2)
[1]  TRUE FALSE  TRUE

> stri_endswith_fixed(c('abaDC','aabadc','ababa'),'ba')
[1] FALSE FALSE  TRUE

> stri_endswith_fixed(c('abaDC','aabadc','ababa'),'ba',to = 3)
[1]  TRUE FALSE  TRUE

> stri_extract_all_fixed('abaBAba','Aba',case_insensitive = TRUE,overlap=T)
[[1]]
[1] "aba" "aBA" "Aba"

> stri_extract_all_boundaries('stringi: THE string processing package 123.45...')
[[1]]
[1] "stringi: "   "THE "        "string "     "processing " "package "   
[6] "123.45..."  


> stri_extract_all_words('stringi: THE string processing package 123.45...')
[[1]]
[1] "stringi"    "THE"        "string"     "processing" "package"   
[6] "123.45"    


> stri_isempty(c(',','','123'))
[1] FALSE  TRUE FALSE

> stri_locate_all('I love biotree, I love jinengshu',fixed = 'lo')
[[1]]
     start end
[1,]     3   4
[2,]    19  20

image-20191006015240570
上一篇下一篇

猜你喜欢

热点阅读