1安装包
问题:
如何安装R包?
方法:
使用install.packages()函数来安装包,括号中写上要安装的包的包名。以安装ggplot2包为例:
代码语言:javascript复制install.packages("ggplot2")
讨论:
如果想要同时安装多个包,可以使用一个包的向量进行参数传递。
代码语言:javascript复制install.packages(c("ggplot2","dplyr"))
2加载包
问题:
如何加载一个已经安装了的包?
方法:
使用library()函数,括号中写上要加载的包名。以加载ggplot2包为例:
代码语言:javascript复制library(ggplot2)
3更新包
问题:
如何更新一个已经安装的包?
方法:
运行update.packages()命令:该命令可以提示你哪些包可以被更新。
代码语言:javascript复制update.packages()
如果想要不加提示地更新所有包,可以加入参数ask = FALSE:
代码语言:javascript复制update.packages(ask = FALSE)
4加载以符号分隔的文本文件
问题:
如何加载一个以符号分隔的文本文件中的数据?
方法:
读取文件中逗号分隔组(CSV文件)数据的最常用的方法是:
代码语言:javascript复制data <- read.csv("datafile.csv")
讨论:
①手动为列名赋值
如果一个数据文件的行首没有列名,那么得到的数据框的列名将是V1、V2等。
代码语言:javascript复制data <- read.csv("datafile.csv", head = FALSE)
想要手动为列名赋值,需要用到names()函数,括号中需写上文件的名称。
代码语言:javascript复制names(data) <- c("First","Second","Sex","Number")
②设置分隔符
sep参数可以设置分隔符。
如果是空格分隔,使用参数sep = ""
代码语言:javascript复制data <- read.csv("datafile.csv", sep = "")
如果是以制表分隔符,sep参数应设置为t
代码语言:javascript复制data <- read.csv("datafile.csv", sep ="t")
③数据类型转换
默认情况下,数据中字符串会被视为因子(factor)处理。以下图为例:得到的数据框会把First、Second等存储为因子,但是此时把他们视为字符串更为合理。
为了区别这一点,可以设置stringsASFactors = FALSE。如果有些列应该被处理为因子,可以再对其逐个转换。
代码语言:javascript复制data <- read.csv("datafile.csv", stringsASFactors = FALSE)
#Sex转为因子类型
data$Sex <-factor(data$Sex)
#查看data内部结构
str(data)
#'data.frame': 3 obs. of 4 variables:
# $ First : chr "Tom" "Dap" "Simitim"
# $ Second: chr "Bobo" "Siam" "Naki"
# $ Sex : Factor "F" "M" "F"
# $ Number: int 2 49 21
5从Excel文件中加载数据
问题:
如何从Excel文件中加载数据?
方法:
readxl包中的read_excel()函数可以读取.xls和.xlsx等Excel文件。下面的代码将会读取Excel中的第一个工作表:
代码语言:javascript复制#安装包
install.packages("readxl")
#加载包
library(readxl)
#读取数据
data <- read_excel("datafile.xlsx", 1)
讨论:
①读取指定工作表
使用read_excel()函数,既可以通过为sheet指定序数也可以通过sheet指定名字从其他工作表中加载数据:
代码语言:javascript复制data <- read_excel("datafile.xlsx", sheet = 2)
data <- read_excel("datafile.xlsx", sheet = "CK")
②手动为列名赋值
如果不想第一行为列名,可以设置参数col_names = FALSE.相应地,各列会被命名为X1、X2等。自定义命名方法同上。
③自定义列的类型
默认情况下,read_excel()会自行判断每一列的数据类型。假如我们想要规定每一列的类型,可以使用col_types参数。我们也可以通过将某些列的类型设置为"blank"来丢弃它们。
代码语言:javascript复制#去除第一列,指定之后3列的类型
data <- read_excel("datafile.xlsx", col_types = c("blank", "text", "date" ,"numeric")
6管道操作符%>%
问题:
如何以一种易读的方式调用一个函数并将其结果传递给另一个函数?
方法:
使用管道操作符%>%(快捷键:Ctrl Shift m)
代码语言:javascript复制#管道符由dplyr包提供
library(dplyr)
#看一下morley数据集
view(morley)
# Expt Run Speed
#001 1 1 850
#002 1 2 740
#003 1 3 900
#…… <94 more rows>……
#098 5 18 800
#099 5 19 810
#100 5 20 870
#加载morley数据集并将其传递给dplyr包中的filter()函数,
#仅仅保留Expt为1的那些行,之后该结果传递给summary()函数计算统计结果
morley %>%
filter(Expt ==1) %>%
summary()
# Expt Run Speed
# Min. :1 Min. : 1.00 Min. : 650
# 1st Qu.:1 1st Qu.: 5.75 1st Qu.: 850
# Median :1 Median :10.50 Median : 940
# Mean :1 Mean :10.50 Mean : 909
# 3rd Qu.:1 3rd Qu.:15.25 3rd Qu.: 980
# Max. :1 Max. :20.00 Max. :1070
如果不使用管道符,前面的代码可以写成:
代码语言:javascript复制summary(filter(morley,Expt ==1))