R语言常用快捷键、excel操作、绘制、统计

Ctrl + 1:移动鼠标至代码区(左上区)
Ctrl + 2:移动鼠标到控制台(左下区)
Ctrl + L:对控制台(左下区)清屏
Ctrl + Shift + N: 新建一个R脚本文件
Ctrl + W / Ctrl + Shift + W: 关闭一个/所有脚本程序文档
Ctrl + O / Ctrl + S: 打开工作目录的文件/保存文件到目录(直接到工作目录)
Ctrl + Enter: 运行一行程序
Ctrl + Shift + Enter: 运行该文件所有程序行
Alt + “-”: 输入R推荐使用的赋值运算符“<-”
Ctrl + Shift + M: 输入“%>% ”管道符号
Ctrl + Shift + 1 使代码区(左上区)全屏
Ctrl + Shift + 3 使代码区(右下区)全屏
 Ctrl+shift+C 批量注释

ls()#查看当前工作空间中的对象(可与Global Environment里对比)

rm(x)#删除当前工作空间中的一个对象x

rm(list = ls())#删除工作空间所有变量


复制下面的语句粘贴在左下区,回车运行:
.packages(all.available=T)
会显示R已安装的所有包。新安装的R,显示的是30个包的名字。
再运行下面的语句:
(.packages())
会显示已启用/加载的包名。刚动R时,有7个包自动启用了。


安装包:
方法1 Packages面板 -> install
方法2 在左边Source区/Console区运行函数安装:install.packages() 



head()#显示数据集的前几行数据,默认为显示前6行。
tail()# 与head对应,默认为显示数据集的最后6行。
我们可以任意修改行数:
head(iris, 3)
tail(iris, 9)
dim()#查看数据集的行数和列数
count(xx)  #xx出现的频率

summary(iris)
显示每列的最小值、中值和均值、最大值,以及1/4和3/4分位数据。如果列是factor类型,就显示各类的数目。
View(iris) # 运行该函数会新开一个窗口。查看完后关闭该窗口
View函数相当于简化的Excel软件。
提醒:如果数据集很大,View就不再合适了。
用View不方便查看数据的简要信息。
colnames()#函数查看数据集的列名

数据类型
class() #显示对象的数据类型
num_char <- as.character(num)  # 将整数型转换为字符型
weight_char <- as.character(weight) # 将数字型转换为字符型
married_char <- as.character(married) # 将因子型转换为字符型
as.numeric()  #转换为数值型

#重新定义因子顺序 (只有factor()能重新设定因子顺序,as.factor函数不能)
season_orderedf <- factor(season, 
                          levels = c("spring", "summer", "autumn", "winter")) 

如果只有factor(season),则按照字母排序
unique(porto$season)
[1] winter spring summer autumn
Levels: autumn spring summer winter

birthdate <- c("1999/3/21", "1999/3/22", "1988/3/22", "1965/3/8", "1999/11/11")
birthdate <- as.Date(birthdate)# 转换为日期型


num <- 1:5
weight <- 50 + rnorm(5)
name <- c("sun", "tang", "zhu", "sa", "ao")
married <- c(T, F, T, F, T)
gender <- factor(c("male", "female", "female", "male", "male"))
birthdate <- as.Date(c("1999/3/21", "1999/3/22", "1988/3/22", "1965/3/8", "1999/11/11"))
dat <- data.frame(num, name, gender, birthdate, married, weight)
数据框(data.frame):由数据类型可不同但等长的向量组成。

知乎:tibble和data frame区别
这两个功能可以说完全一样,只是在看书过程中发现tibble慢慢比data frame更流行起来,详情可以见这篇文章tibble 1.0.0 | RStudio Blog,在导入dplyr包后,用tibble比用data frame更快捷简洁,tbl_df代替了table。(在使用tibble时,要导入dplyr包)



max(x)
min(x)
median(x) #中值
mean(x)  #均值  	
sd(x) #标准差
pairs() # R自带的pairs函数,可很方便地分析数据之间的关系

# 直线回归
lm(y~x) 

#如果要使截距为0,则应为
lm(y~x - 1)

# 计算相关系数
cor(x, y)

查看数据:缺失值   is.na(airquality)  将相应位置上的数值替换成 true或者false

which(is.na(airquality), arr.ind = TRUE)  #which函数用来寻找逻辑值为真的值所在的位置。 is.na(airquality)表示的是一个逻辑向量或数字,arr.ind(array indices)是一个逻辑值,如果为真,会给出在数据中的行、列位置。

max(airquality$Solar.R,na.rm=TRUE)  #na.rm=TRUE 用来删除缺失值,否则会报错。

操作、运算
library(tidyverse)

dplyr 的基本函数只有5个:
	select:横向选取,选取几列数据
	filter:纵向筛选,筛选出一些数据行  满足某些筛选条件
	summarise:纵向计算,对一列内的所有数据统计分析
	mutate:横向计算,生成新的列 
    transmute  只保留新生成的数据列
	arrange:纵向排序,按一列或几列数据排序

使用slice函数:指定行的编号,筛选出特定行的数据
wea_new <- slice(porto, 1:5)

选取列的方法:直接写出要选的列名;如果是连续的几列,	就写出首列和末列,中间用“:”连接
<- select(myiris, species, petal_length:petal_width)

删除myiris的species列
myiris_new2 <- select(myiris, -species) 




调整列的顺序
a <-select(dataframe,第一列,第二列,everything()) #everything()其他的按顺序排列

查看数据的构成元素
unique(porto$season)
[1] "winter" "spring" "summer" "autumn" 

%in%函数:用于比较两个数据集,检查左边的数据集中各数据,是否出现在右边的数据集中
在部分情况下,用%in%代替==会非常方便
porto_NS2 <- filter(porto, dir_wind %in% c("N", "S"))  
porto_NS <- filter(porto, dir_wind == "N" | dir_wind == "S")

# 把计算结果存入一个新对象res  res中只含有sum_rain、max_rain
res <- summarise(temprain, sum_rain = sum(rainfall), 
		         max_rain = max(rainfall)) 
mutate函数则返回一个由原始数据和修改或汇总后数据两部分构成的数据框
summarise函数返回一个只包含修改或汇总后数据的数据框

summarise(rainday, n_rain=n())  #n函数是统计各组内的数据个数(行数)



rain_order <- arrange(porto, rainfall)  
rain_desc <- arrange(porto, desc(rainfall))
默认的是升序排序(从小到大),用dplyr包的函数desc时变为降序排序。

管道函数%>%只能放在行末,不能放在下一行行首!
porto %>% select(day_num, season, rained, ave_temp) %>% 
	group_by(season, rained) %>% 
	summarise(max_avetemp = max(ave_temp)) -> res2


group_by函数按照某个变量分组,对于数据集本身并不会发生什么变化,只有在与mutate(), arrange() 和 summarise() 函数结合应用的时候会体现出它的优越性,将会对这些 tbl 类数据执行分组操作 (R语言泛型函数的优越性).

 即使使用了group_by() 分组,arrange得到的与分组前结果一样,这是因为:
  arrange(.data, ..., .by_group = FALSE)  arrange函数默认是不按分组排序。
  所以要重新设置参数,arrange(.data, ..., .by_group = TRUE) by_group前面有个”.”

count(porto, rained) # 使用count函数,直接完成了分组和组内个数计算两步
效果等同于porto %>% group_by(rained) %>% summarise(n = n())
读取、存储、路径

install.packages("rio")
library(rio)#安装rio包后启用它,提示还需要运行install_formats()安装一些包。就依指令完成安装

读入文件  
<- import("porto.csv")

读入xlsx文件某个表的数据 
<- import("myiris2.xlsx", sheet = 2)

读入txt文本文件数据  
<- import("myiris.txt")

将数据框类型的weather保存到一个xlsx文件和csv文件中(不支持保存为xls格式文件)
export(weather, "nyw_rio.xlsx")
export(weather, "nyw_rio.csv")  


在已有的Excel文件中增加新的数据表,sheet2名为porto,df为存入的数据框
export(df, "nyw_rio.xlsx", which = "porto")


我们可以获得当前工作目录的路径
getwd()

用setwd()设置该文件夹为临时的工作文件夹,需在复制过来的文件夹路径的“\”处,多加一个“\”。

setwd(“C:\\Users\\GuoYan\\Desktop\\R2020”)

如果数据文件不在R的工作目录里,或者记不清数据文件名,可以用鼠标选择目录和文件名。
porto <- read.csv(file.choose()) 


dir.create(“rdat”)   先在工作目录中新建一个子目录
	setwd(“./rdat”)       将子目录设置为工作目录
	getwd()                    查看当前的子目录


setwd("..")    返回原来的工作目录为工作目录

如果文件在R工作目录下的rdat子目录下
import("./rdat/porto.csv")

绘图  ggplot就是通过将不同的简单图层叠加起来,构建复杂的图形。

library(ggplot2)
换行时,“+”必须放在行尾,不能在行首,和 %>%一样

porto %>% ggplot(aes(x = dir_wind)) + geom_bar()

porto %>% ggplot(aes(l_temp, h_temp)) + geom_point(size = 2.5)

porto %>% ggplot(aes(day_num, ave_temp)) + geom_line(size=0.8)

porto %>% ggplot(aes(ave_temp)) + geom_histogram()

porto %>% ggplot(aes(season, ave_temp)) + geom_boxplot()

geom_smooth()#趋势图

theme(text=
	element_text(size = 20))   #改20号字
theme(text = element_text(size = 20))绘图时使用12号字

aes(x,y,group=,fill=,color=,shape = )
在factor(x)时,x轴不会出现除了x的别的数

*****************
如果例如color=num,如果num为整数型,则映射颜色是连续型的
如果num为因子型,则颜色映射是离散型的
*****************


theme_bw()  黑白背景
xlim(0, 2000) +ylim(0, 250) x、y轴值域范围

修改坐标轴标签文本,并加上图题
xlab("Tree Age (d)") +
    ylab("Tree Circ (mm)") +
    ggtitle("Tree perimeter change")

coord_flip()  x轴的标签比较乱时,可用这个函数让x、y互换


position = "dodge" #尽管group参数按季节把风向频数分了组,但geom_bar函数的缺省设置是堆叠--码起来,要dodge一下


在用fill填色时,就默认地对bar条分了组,所以group函数可以省略

fill参数是用来映射bar条的填充颜色的,color参数是映射bar条轮廓的颜色

条形图-有序因子
porto$dir_wind <- factor(porto$dir_wind, 
               levels = c("E", "S", "W", "N"))


整数型数据并不能很好地扮演分组角色。所以应该转换成因子型

#绘制分面图 
porto %>%  ggplot(aes(l_temp, h_temp)) +
  geom_point() +
  facet_wrap(~season)

ggsave("porto_temp.png") 将ggplot2最近生成的那个图,以porto_temp.png的文件名,保存在工作目录里了

横坐标major按纵坐标n大小排序(降序),如果按升序排列,改写为reorder(major, -n)
stu %>% count(major) %>% 
  ggplot(aes(reorder(major, n), n)) + 
  geom_col(fill = "darkred") 

scale_y_reverse() 把y轴反过来朝下了
scale_x_continuous(position = "top")把x轴放在了顶上
scale_y_log10()  对数坐标轴
长表转宽表
otrees_wid <- pivot_wider(otrees,
                  names_from = age, values_from = circ)
names_from指定宽表的列名来自长表的哪一列,values_from指定宽表的数据来自长表的哪一列


宽表转长表
otrees_long <- pivot_longer(otrees_wid, cols = 2:8,
                              names_to = "age", values_to = "circ")
颜色映射

离散型数据
 scale_fill_manual(values = c("blue", "green", "yellow", "red"))

使用RColorBrewer包的调色板
library(RColorBrewer)
display.brewer.all()

使用RColorBrewer包的调色板“Set2”
scale_fill_brewer(palette = "Set2")

绘制研究报告和论文的图时,采用ggsci包的调色板是一条捷径!
library(ggsci)
p_wind + scale_fill_lancet()  这里使用了著名期刊《柳叶刀》(lancet)的调色板。比较典雅!


连续型数据

scale_fill_material("red")
scale_fill_gradient(low = "lightblue", high = "red")
scale_fill_gradient2(low = "green", 
                       mid = "yellow", high = "red", midpoint = 35)

scale_fill_gradientn(colours = c( "blue", "green", "yellow", 		"brown", "red")) 


线状连续
scale_color_manual(values = 
      c("red","blue", "yellow", "brown", 
	"green"))


theme(legend.position = c(0.10, 0.75))
把绘图区域看成是以(0, 0)到(1, 1)为对角线的正方形区域,以此确定摆放图例
的位置。所给定的位置向量(0.1, 0.75)是图例中心的相对坐标。


theme_bw函数是ggplot2给出的一个非常常用的主题。通常先调用该主题函数,然后继续细化设置。

new_theme <- theme_bw() +
    theme(legend.position = c(0.94, 0.77)) +		# 设定图例位置
    theme(axis.text = element_text(size = 10)) +    	# 设定坐标刻度标示字号
    theme(axis.title = element_text(size = 12)) +	# 设定坐标轴标题字号
    theme(panel.grid = element_blank()) 		# 把背景的网格都去掉

ggsave("porto1.png", plot=p2_porto,
     	  height=12, width=20, units="cm", dpi=600)
dpi (Dots Per Inch),意思是每英寸点数。照片分辨率300dpi,是说照片的每英寸长度里有300个像素
这里的dpi参数,实际是控制pixels per inch (ppi),并不是dots per inch。

高质量R绘图的10条tips
2. 打印图形请用PDF格式
3. 网页显示请用PNG格式
9. 永远不要使用JPEG格式
ggsave函数只能保存ggplot2产生的图

你可能感兴趣的:(学习笔记,r语言)