请先安装好R和RStudio

如果不干别的,控制台就是一个内置计算器

2 * 3  #=> 6
sqrt(36) #=> 6, square root
log10(100) #=> 2, log base 10
10 / 3 #=> 3.3, 10 by 3
10 %/% 3 #=> 3, quotient of 10 by 3
10 %% 3 #=> 1, remainder of 10 by 3 余数 

分配符

a <- 10  # assign 10 to 'a'
a = 10 # same as above
10 -> a # assign 10 to 'a'
10 = a # Wrong!. This will try to assign `a` to 10.类

类或者数据类型 

R语言基于变量被赋予的值的属性自行决定变量类型,而非刻意定义变量类型

更改变量类型

R语言中变量类型有无穷个,因为可以自由定义新的类,当然,一些常用的类有以下:

变量类型

  • character – Strings
  • integer – Integers
  • numeric – Integers + Fractions 整数和小数
  • factor – Categorical variable where each level is a category 类型变量
  • logical – Boolean
  • complex – Complex numbers 复数

数据类型

  • vector – A collection of elements of same class 向量
  • matrix – All columns must uniformly contain only one variable type. 矩阵 所有列都包含同一种变量类型
  • data.frame – The columns can contain different classes. 每一列可以包含不同的类
  • list – Can hold objects of different classes and lengths 可以包含不同类及不同长度的对象

R语言包及下载

R是一种开源语言,有很多包,实现不同的功能

install.packages("car")  # install car package 下载离你所在地方最近的CRAN镜像的包

  调用包之前,需要初始化

library(car)  # initialize the pkg 'car'  初始化
require(car) # another way to initialize 初始化
library() # see list of all installed packages 列出所有以及下载的包
library(help=car) # see info about 'car' pkg 关于包的信息

获得帮助

help(merge)  # get help page for 'merge'
?merge # lookup 'merge' from installed pkgs 从以及下载的包中查找
??merge # vague search 模糊查询
example(merge) # show code examples 展示代码案例

工作目录

getwd()  # gets the working directory 获取当前目录
setwd(dirname) # set the working directory to dir name 设置工作目录 名称只能用 / 或者 \\ 分割 

导入导出数据

R语言最常见最方便导入的数据格式是csv文件,也有其他包可以导入xlsx、数据库文件

myData <- read.table("c:/myInputData.txt", header = FALSE, sep="|", colClasses=c("integer","character","numeric") # import "|" separated .txt file
myData <- read.csv("c:/myInputData.csv", header=FALSE)  # import csv file 可以用colClass来人为设定数据框中每列的数据类型,这样处理效率更高,否则是自动识别数据类型的。
write.csv(rDataFrame, "c:/output.csv") # export  

如何浏览 删除控制台的对象

当创建新的变量时,默认在全局环境获得存储空间

a <- 10
b <- 20
ls() # list objects in global env 列出全局环境中所有对象
rm(a) # delete the object 'a'
rm(list = ls()) # caution: delete all objects in .GlobalEnv 删除全局环境中所有对象
gc() # free system memory 释放系统内存

也可以创建新的环境来存储变量,可以把环境想象成一个包含对象(变量)的容器,最外面的主要环境就是全局环境,而环境容器本身也是对象,所以说可以在全局环境中创建很多个新的环境对象,只是说如果想进入新创建的环境,必须明确告诉R你想看哪一个子环境。

rm(list=ls())  # remove all objects in work space
env1 <- new.env() # create a new environment
assign("a", 3, envir = env1) # store a=3 inside env1
ls() # returns objects in .GlobalEnv
ls(env1) # returns objects in env1
get('a', envir=env1) # retrieve value from env1

创建向量

使用函数 c(). 创建向量,向量中所有元素类型必须一致,如果不一致,会自动转换为统一类型元素

vec1 <- c(10, 20, 15, 40)  # numeric vector
vec2 <- c("a", "b", "c", NA) # character vector
vec3 <- c(TRUE, FALSE, TRUE, TRUE) # logical vector
vec4 <- gl(4, 1, 4, label = c("l1", "l2", "l3", "l4")) # factor with 4 levels length(vec1) # 4
print(vec1[1]) # 10 从1开始索引
print(vec1[1:3]) # 10, 20, 15 

尽管可以随意增加向量中的元素,但是初始化向量的长度仍然很有必要,因为这样可以节约运行时间,只需要往索引的位置填补新元素,特别是当数据量很大的时候,如下所示

numericVector <- numeric(100) # length 100 elements 

对向量进行操作

切片

logic1 <- vec1 < 15  # create a logical vector, TRUE if value < 15
vec1[logic1] # elements in TRUE positions will be included in subset 逻辑值为真的元素
vec1[1:2] # returns elements in 1 & 2 positions.
vec1[c(1,3)] # returns elements in 1 & 3 positions 位置1 3处元素

排序

sort(vec1)  # ascending sort 升序
sort(vec1, decreasing = TRUE) # Descending sort 降序

或者

vec1[order(vec1)]  # ascending sort
vec1[rev(order(vec1))] # descending sort

自定义向量排列

seq(1, 10, by = 2)  # diff between adj elements is 2 相邻元素差为2
seq(1, 10, length=25) # length of the vector is 25 向量长度是25
rep(1, 5) # repeat 1, five times. 重复1 五次
rep(1:3, 5) # repeat 1:3, 5 times
rep(1:3, each=5) # repeat 1 to 3, each 5 times.

删除缺失值

vec2 <- c("a", "b", "c", NA)  # character vector
is.na(vec2) # missing TRUE 返回一个缺失值处为真的逻辑向量
!is.na(vec2) # missing FALSE
vec2[!is.na(vec2)] # return non missing values from vec2 返回非缺失值

抽样

sample(x, size, replace = FALSE, prob = NULL)

set.seed(100)  # optional. set it to get same random samples. 设置随机数
sample(vec1) # sample all elements randomly 把所有元素打乱顺序
sample(vec1, 3) # sample 3 elem without replacement 抽取三个元素 3是抽样后得到的样本数量
sample(vec1, 10, replace=T) # sample with replacement 意思是抽取的元素可以相同 #对数据框抽取
data=1:10
#抽取列
sample(x=data,size=1,replace=T)
#抽取行
data[sample(nrow(data),2,replace=F),] #按比例抽取
set.seed(1234)
#按7:3的比例产生了1和2
index <- sample(x = 2,size = nrow(data),replace=TRUE,prob = c(0.7,0.3))
traindata <- data[index == 1,]
testdata <- data[index == 2,] #按照某个字段分层抽取
result<-data.frame()
data<-data.frame(a=c(1,2,3,4,6,7,8,5,11,12),b=c(2,3,4,5,65,4,6,6,8,9),s=c('A','B','A','A','B','A','B','A','B','B'))
subdata<-split(data,data$s) #按照s变量中的类型分类成列表
for(i in 1:length(subdata)){
sub<-subdata[[i]]
x<-sub[sample(nrow(sub),2,replace=F),] #每个列表元素中抽取两行
result<-rbind(result,x) #rbind函数 按照行叠加起来
}
result

数据框

数据框是一种很便于进行数据分析的数据对象,R读取csv文件时也是以数据框形式读取的,可用向量创建数据框,R语言也有很多内置的数据框格式数据集

myDf1 <- data.frame(vec1, vec2)  # make data frame with 2 columns
myDf2 <- data.frame(vec1, vec3, vec4)
myDf3 < data.frame(vec1, vec2, vec3) library(datasets) # initialize
library(help=datasets) # display the datasets #下面一些基本操作代码会经常用到
class(airquality) # get class
sapply(airquality, class) # get class of all columns
str(airquality) # structure
summary(airquality) # summary of airquality
head(airquality) # view the first 6 obs
fix(airquality) # view spreadsheet like grid
rownames(airquality) # row names
colnames(airquality) # columns names
nrow(airquality) # number of rows
ncol(airquality) # number of columns # cbind rbind 为数据框添加行和列
cbind(myDf1, myDf2) # columns append DFs with same no. rows
rbind(myDf1, myDf1) # row append DFs with same no. columns

对数据框进行切片操作

myDf1$vec1  # vec1 column
myDf1[, 1] # df[row.num, col.num]
myDf1[, c(1,2)] # columns 1 and 2
myDf1[c(1:5), c(2)] # first 5 rows in column 2 #也可以使用 subset() 和 which() 函数 which() 返回符合条件的行或列向量
subset(airquality, Day == 1, select = -Temp) # 选择 Day=1 剔除 'Temp'
airquality[which(airquality$Day==1), -c(4)] # 作用同上

抽样 

把数据分为训练数据集和验证数据集

set.seed(100)
trainIndex <- sample(c(1:nrow(airquality)), size=nrow(airquality)*0.7, replace=F) # get test sample indices 0.7比例 灵活性
airquality[trainIndex, ] # training data
airquality[-trainIndex, ] # test data

合并数据框

可以通过共同的列变量进行合并,merge()函数的不同参数可以实现内join,left join,right join以及完整join

merge(x, y, by = intersect(names(x), names(y)), by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all, sort = TRUE, suffixes = c(".x",".y"), incomparables = NULL, ...)

x: 第一个数据框

y: 第二个数据框

by,by.x,by.y:用于连接两个数据集的列,intersect(a,b)值向量a,b的交集,names(x)指提取数据集x的列名 by = intersect(names(x), names(y)) 是获取数据集x,y的列名后,提取其公共列名,作为两个数据集的连接列, 当有多个公共列时,需用下标指出公共列,如names(x)[1],指定x数据集的第1列作为公共列 也可以直接写为 by = ‘公共列名’ ,前提是两个数据集中都有该列名,并且大小写完全一致,R语言区分大小写

all, all.x, all.y: 指定合并类型的逻辑值。缺省为false,all=FALSE (仅返回匹配的行).

最后一组参数all, all.x, all.y需要进一步解释,决定合并类型。

内 join: 仅返回两数据框中匹配的数据框行,参数为:all=FALSE.

outer join: 返回两数据框中所有行, 参数为: all=TRUE.

Left outer join: 返回x数据框中所有行以及和y数据框中匹配的行,参数为: all.x=TRUE.

Right outer join: 返回y数据框中所有行以及和x数据框匹配的行,参数为: all.y=TRUE.

sort:by指定的列是否要排序.

suffixes:指定除by外相同列名的后缀.

incomparables:指定by中哪些单元不进行合并.

  • inner 模式匹配,只显示两个数据集公共列中均有的行

# 有多个公共列时,需指出使用哪一列作为连接列merge(x,y,by=intersect(names(x)[1],names(y)[1]))

# 当两个数据集连接列名称同时,直接用by.x,by.y 指定连接列merge(x,y,by.x ='name',by.y ='name')

# 当两个数据集均有连接列时,直接指定连接列的名称merge(x,y,by='name')

  • outer 模式,将两张表的数据汇总,表中原来没有的数据置为空

merge(x, y, all=TRUE, sort=TRUE)

# all = TRUE 表示选取x, y 数据集的所有行,sort = TRUE,表示按 by 列进行排序,默认升序

  • left 匹配模式

merge(x ,y,all.x=TRUE,sort=TRUE)

# 多个公共列 末指定连接列 ,左连接,设置 all.x = TRUE,结果只显示数据x的列及x在y数据集中没有的列

merge(x, y, by = 'name',all.x = TRUE, sort = TRUE) # 多个公共列 指定连接列指, 左连接,设置 all.x = TRUE,结果只显示x所有names(x)[1]值

  • right 匹配模式

merge(x ,y ,by='name',all.y=TRUE,sort=TRUE)

# 多个公共列指定连接列# 左连接,设置all.y =TRUE,结果只显示y所有names(y) [1] 值的记录

paste 函数

连接字符串,自定义字符串模式

paste("a", "b")  # "a b"
paste0("a", "b") # concatenate without space, "ab"
paste("a", "b", sep="") # same as paste0
paste(c(1:4), c(5:8), sep="") # "15" "26" "37" "48"
paste(c(1:4), c(5:8), sep="", collapse="") # "15263748"
paste0(c("var"), c(1:5)) # "var1" "var2" "var3" "var4" "var5"
paste0(c("var", "pred"), c(1:3)) # "var1" "pred2" "var3"
paste0(c("var", "pred"), rep(1:3, each=2)) # "var1" "pred1" "var2" "pred2" "var3" "pred3

处理日期字符串

dateString <- "15/06/2014"
myDate <- as.Date(dateString, format="%d/%m/%Y")
class(myDate) # "Date"
myPOSIXctDate <- as.POSIXct(myDate) # convert to POSIXct

查看R对象的内容

attributes(myPOSIXltDate)  # best
unclass(POSIXltDate) # works!
names(myPOSIXltDate) # doesn't work on a POSIXlt object
unlist(myPOSIXltDate) # works! object.size(myDate) # 216 bytes
object.size(myPOSIXltDate) # 1816 bytes
object.size(myPOSIXctDate) # 520 bytes

列联表

test <- c(1,2,3,2,1,1,5,6,4,5,1)
test1 <- table(test)
test1
test
1 2 3 4 5 6 #test中的元素
4 2 1 1 2 1 #各个元素出现的频率
#提取table()中的元素
names(test1)
[1] "1" "2" "3" "4" "5" "6"
#提取table()中的频率
as.numeric(test1)
[1] 4 2 1 1 2 1
#3.进阶,提取table()中指定频率的数据,先用as.data.frame()转换
test2 <- as.data.frame(test1)
test2
test Freq
1 1 4
2 2 2
3 3 1
4 4 1
5 5 2
6 6 1
test2[which(test2$Freq==1),] #提取出现频率为1的元素
test Freq
3 3 1
4 4 1
6 6 1

列表

列表是R语言中的对象,它包含不同类型的元素,比如 - 数字,字符串,向量和另一个列表等。一个列表还可以包含一个矩阵或一个函数作为它的元素。使用list()函数创建列表。

# Create a list containing strings, numbers, vectors and a logical values.
> list_data <- list("Red", "Green", c(21,32,11), TRUE, 51.23, 119.1)
> print(list_data)
> print(list_data)
[[1]]
[1] "Red"
[[2]]
[1] "Green"
[[3]]
[1] 21 32 11
[[4]]
[1] TRUE
[[5]]
[1] 51.23
[[6]]
[1] 119.1

命名列表元素

# Give names to the elements in the list.
names(list_data) <- c("1st Quarter", "A_Matrix", "A Inner list")

访问列表元素

print(list_data[1])#使用元素索引访问
print(list_data$A_Matrix)#使用名称访问

操控列表元素

list_data[3] <- "updated element"#更新
list_data[4] <- NULL #删除
# Create two lists.
list1 <- list(1,2,3)
list2 <- list("Sun","Mon","Tue")
# Merge the two lists.
merged.list <- c(list1,list2)

转换列表为向量

# Convert the lists to vectors.
v1 <- unlist(list1)

条件语句

if(checkConditionIfTrue) {
....statements..
....statements..
} else { # place the 'else' in same line as '}'
....statements..
....statements..
}

for 循环

for(counterVar in c(1:n)){
.... statements..
}

Error handling with tryCatch()

tryCatch({1 <- 1; print("Lets create an error")}, # First block
error=function(err){print(err); print("Error Line")}, # Second Block(optional)
finally = {print("finally print this")})# Third Block(optional)
#=> [1] "Lets create an error"
#=> <simpleError in 1 <- 1: invalid(do_set) left-hand side to assignment>
#=> [1] "Error Line"
#=> [1] "finally print this"

参考:

http://r-statistics.co/R-Tutorial.html

https://www.jianshu.com/p/148a399b61d3

https://blog.csdn.net/neweastsun/article/details/79435271

https://blog.csdn.net/wlt9037/article/details/76570155

https://www.jianshu.com/p/9d52cd5aa6d9

R语言基础入门的更多相关文章

  1. R语言基础入门之二:数据导入和描述统计

    by 写长城的诗 • October 30, 2011 • Comments Off This post was kindly contributed by 数据科学与R语言 - go there t ...

  2. 【计理05组01号】R 语言基础入门

    R 语言基本数据结构 首先让我们先进入 R 环境下: sudo R 赋值 R 中可以用 = 或者 <- 来进行赋值 ,<- 的快捷键是 alt + - . > a <- c(2 ...

  3. R 语言 相关入门资料

    <R语言基础语法入门>: http://www.xueqing.tv/upload/april-training/day1/index.html#1

  4. R语言基础:数组&列表&向量&矩阵&因子&数据框

    R语言基础:数组和列表 数组(array) 一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的. 数组函数是array(),语法是:array(dadta, d ...

  5. R语言基础画图/绘图/作图

    R语言基础画图/绘图/作图 R语言基础画图 R语言免费且开源,其强大和自由的画图功能,深受广大学生和可视化工作人员喜爱,这篇文章对如何使用R语言作基本的图形,如直方图,点图,饼状图以及箱线图进行简单介 ...

  6. R语言快速入门上手

    导言:     较早之前就听说R是一门便捷的数据分析工具,但由于课程设计的原因,一直没有空出足够时间来进行学习.最近自从决定本科毕业出来找工作之后,渐渐开始接触大数据行业的技术,现在觉得是时候把R拿下 ...

  7. R语言(入门小练习篇)

    问题: 一组学生参加了数学.科学和英语考试.为了给所有的学生确定一个单一的成绩衡量指标,需要将这些科目的成绩组合起来.另外,还想将前20%的学生评定为A,接下来20%的学生评定为B,以此类推.最后,希 ...

  8. 从零开始系列-R语言基础学习笔记之二 数据结构(二)

    在上一篇中我们一起学习了R语言的数据结构第一部分:向量.数组和矩阵,这次我们开始学习R语言的数据结构第二部分:数据框.因子和列表. 一.数据框 类似于二维数组,但不同的列可以有不同的数据类型(每一列内 ...

  9. 从零开始系列--R语言基础学习笔记之一 环境搭建

    R是免费开源的软件,具有强大的数据处理和绘图等功能.下面是R开发环境的搭建过程. 一.点击网址 https://www.r-project.org/ ,进入"The R Project fo ...

随机推荐

  1. jquery EasyUi 添加节点、展开所有节点、默认选中第一个节点

    感觉easyUi 的树用起来不如 Ext 的树方便,首先,root节点不太好自定义, 异步加载时,只能通过后台判断生成root节点,但是这样一来有一个问题,就是第一次访问界面时, 树的初始化比较慢,大 ...

  2. SDS模块

    早上花了一点时间读了下sds的相关源码,其实sds就是构造了两个字段用来记录len和free的状态,然后还有一个char[]用来记录字符串的值. 然后sds模块的函数都是在模拟str的操作. 比较,追 ...

  3. (15)ASP.NET Core Web主机(IWebHostBuilder)

    1.前言 ASP.NET Core应用程序可以配置和启动主机(Host).主机负责应用程序启动和生存期管理,配置服务器和请求处理管道.主机还可以设置日志记录.依赖关系注入和配置.而host主机又包括W ...

  4. java并发编程(四)----(JUC)Lock锁初探

    首先我们来回忆一下上一节讲过的synchronized关键字,该关键字用于给代码段或方法加锁,使得某一时刻它修饰的方法或代码段只能被一个线程访问.那么试想,当我们遇到这样的情况:当synchroniz ...

  5. java并发编程(一)----线程基础知识

    在任何的生产环境中我们都不可逃避并发这个问题,多线程作为并发问题的技术支持让我们不得不去了解.这一块知识就像一个大蛋糕一样等着我们去分享,抱着学习的心态,记录下自己对并发的认识. 1.线程的状态: 线 ...

  6. Tunnel Warfare HDU - 1540 (线段树不同子树的合并)

    在抗日战争期间,华北平原广大地区进行了大规模的隧道战. 一般来说,通过隧道连接的村庄排成一列. 除了两端,每个村庄都与两个相邻的村庄直接相连. 入侵者经常对一些村庄发动袭击并摧毁其中的部分隧道. 八路 ...

  7. 趣味CSS3效果挑战小汇总

    众所周知,在CSS3中产生了诸多优秀的特性,现在就来分享一下我这段时间对于这些特性的效果实践,希望对大家有所启发. 挑战1: 画一个对话框 要画一个对话框,首先来学习做一个三角形.其实非常的简单. & ...

  8. powerdesign进军(一)--安装破解

    目录 资源下载地址 安装powerdesign 破解powerdesign 汉化 总结 IT行业不管是web开发还是客户端开发都需要数据库,因为现在是数据时代能够拥有强大的数据就是行业的王者.目前一些 ...

  9. 自定义GroupBox

    public partial class mGroupBox : GroupBox { private Color _TitleBackColor = Color.Black; private Fon ...

  10. gcd 和 同余方程(Exgcd)

    求关于x的同余方程 ax≡1(mod b) 的最小正整数解. 对于 100%的数据,2≤a,b≤2*109. NOIP 2012 提高组 第二天 第一题 (只看Exgcd的自行跳过这段文字) 先撇开扩 ...