1_R基本语法笔记

#R语言入门常用语法#
#包的声明:library(***)
R语言三种数据结构
Array数组 
List
DataFrame
R中变量的操作
rm()#里面填变量名,删除变量
ls()#列出所有的变量,不填东西
数值型向量赋值:
x <- 1      #x==1
y <- c(1,2,3)#行向量直接赋值,加c;y==[1 2 3]
y <- c(1:3)#':'步进为1,和上面的相同y==[1 2 3]
z <- rep(y,times=3)#将y赋值给z,次数为3z==[1 2 3 1 2 3 1 2 3]
i <- rep(y,time=2,length.out=5,each=2)#y赋值给i,y重复两次,每个元素重复两次,i总长不超过5i=[1 1 2 2 3]
i <- rep(y,2,5,2)#简写,与上面的相同。i=[1 1 2 2 3]
j <- rep(y,times=c(1,2,3))#times对应每一个元素进行循环j=[1 2 2 3 3 3]
h <- seq(from =160,to = 181,by =3)#生成等差数列
数值型向量计算,求值,排列:
3+2#[1]5
3-2#[1]1
3*2 #[1]6
3/2 #[1]1.5
3^2#[1] 9
3%%2#[1] 1  #取余
1:5 * 1:5#[1] 1 4 9 16 25# 行向量,对应元素乘对应元素
1:6 * 1:2#[1] 1 4 3 8 5 12# 1:6是1:2的倍数,1:2扩展成[1 2 1 2 1 2];如果不是倍数,会报错
1:2 * 1:6#[1] 1 4 3 8 5 12# 扩展,同上
1:2 + 1:6#[1] 2 4 4 6 6 8 # 扩展,同上
1:2 - 1:6#[1]  0  0 -2 -2 -4 -4# 扩展,同上
exp(4)#[1] 54.59815 计算自然对数 exp(x)=e^x
sqrt(4)#[1] 2#平方根
sin() cos() tan()#角度
max() min()#向量取大取小max(1:5*1:5)==[1] 25
range(1:5 * 1:5)#[1]  1 25取最大最小
unique()#删除重复元素,只留一个
mean()median()#平均数 中位数
sum() prod()#向量中的值求和 求积
cumsum()#求积累和 cumsum(1:4)==[1]  1  3  6 10 不能在括号里赋值 比如cumsum(1,8,5)报错
cumprod()#求累积(从左向右)乘积
cummax() cummin()#求累积最大最小值(从左向右)
pmax(x,y) pmin(x,y)#求向量x和y在相应位置的元素的最大者、最小值
var() sd()#方差(用n-1做分母)标准差(均方差)
rev() sort()#取逆序 元素升序排列
length()#判断长度
which.max() which.min()#求最大最小值的下标
R语言定义函数
myfunction <- function(arg1, arg2, ... ){
statements
return(object)
}
索引及逻辑:
x <- 1:4  x[2]#x向量里的第二个元素位置索引
x <- 1:4  x[x>2]#查找符合条件的内容显示 顺序不变
数值型向量处理:
首先定义: “x <- 1:5” 一个五维行向量
1.判断是否为数值型向量 is.numeric(x) 
  其他向量转换为数值型向量: as.numeric()
  同样判断是否为字符、逻辑的函数: is.character()、is.logical()
  转化为字符、逻辑的函数: as.character()、as.logical()
2.修改一个元素 x[3] <- 8
  增加一个元素为6. x[6] <- 6 如果直接写“ x[8] <- 6 ”那么x的第六和第七个元素自动赋值为“NA”,表示缺失值。
  删除最后一个元素 x <- x[1:(length(x)-1)]
字符串向量:
字符串向量写在双引号“中
赋值:
paste("水浒传",1:30,"集",sep=" ")#组合起来 分隔符是sep里的内容
数组,数据框,列表:
1.数组
a <- array(data=x,dim=c(3,4))
#若x==(1:12),则获得数组a
#   [,1] [,2] [,3] [,4]
#[1,]    1    4    7   10
#[2,]    2    5    8   11
#[3,]    3    6    9   12
a[2,2]#5 取数值
a[2, ]#[1]  2  5  8 11取行、列
2.数据框(类似excel的东西):
city <- c('beijing','shanghai','chengdu','shanghai','chengdu')
age <- c(23,95,6,32,45)
sex <- c('F','M','M','F','M')
people <- data.frame(city,age,sex)
#> print(people)
#  city age sex
#1  beijing  23   F
#2 shanghai  95   M
#3  chengdu   6   M
#4 shanghai  32   F
#5  chengdu  45   M
#####元素行数不同会报错 Error in data.frame(city, age, sex) : 参数值意味着不同的行数: 4, 5
people[2,3]#[1] M Levels: F M取值
people[ ,2]#[1] 23 95  6 32 45
people$age#[1] 23 95  6 32 45
people$age>30#[1] FALSE  TRUE FALSE  TRUE  TRUE
people[people$age>30, ]
#      city age sex
#2 shanghai  95   M
#4 shanghai  32   F
#5  chengdu  45   M
3.列表:
mylist <- list(age=age,city=city,sex=sex)
#mylist==
#$age[1] 23 95  6 32 45
#$city[1] "beijing"  "shanghai" "chengdu"  "shanghai" "chengdu" 
#$sex[1] "F" "M" "M" "F" "M"
mylist$age#[1] 23 95  6 32 45
mylist[1]#$age [1] 23 95  6 32 45
mylist[[1]]#[1] 23 95  6 32 45
4. 对象和类
class(people)#[1] "data.frame"查看类
class(mylist)#[1] "list"
mode(mylist)#相同
attributes(people)#查看属性
#$names
#[1] "city" "age"  "sex" 
#$row.names
#[1] 1 2 3 4 5
#$class
#[1] "data.frame"
attributes(mylist)#$names [1] "age"  "city" "sex" 
str(people)#详细情况
#'data.frame':5 obs. of  3 variables:
#$ city: Factor w/ 3 levels "beijing","chengdu",..: 1 3 2 3 2
#$ age : num  23 95 6 32 45
#$ sex : Factor w/ 2 levels "F","M": 1 2 2 1 2
R语言的可视化函数:
1.包
graphics包,R里面自带
lattice包
latticeExtra包
ggplot2包
install.packages("lattice")
各种高级绘图函数都服从以下格式:
graph_function(formula,data= ,options)#graph_function是函数,formula指定要展示的变量和条件变量,data指定一个数据框,options是逗号分隔参数,用来修改图形的内容、摆放方式和标注
2.基本绘图函数
plot(a~b,pch=1,xaxt = 'n',yaxt= 'n')#xaxt = 'n',说明关闭x轴刻度线
plot(a~b)#a放在X轴,b放在Y轴 散点图 ab长度需一致
plot(a~b,type='l')#折线图
plot(a~b,type='h')#类似条状图
hist(a)#直方图(条形图)
3.lattice包
声明library(lattice)
barchart函数 条形图
qqmath散点图
stripplot一条线上的散点图?,分组绘图,在不同图形里表示
densityplot密度图,分组绘图,多个图在同一个坐标系里面
等等等等#http://blog.csdn.net/yhb315279058/article/details/49429957
4.ggplot2包
按图层绘图
data:可视化的数据对象
R语言读取数据:
1.输入
readline()#输入一次,读取,将所有东西保存为一个字符型数据
scan()#多个值输入,必须相同的值
2.本地文本输出
注意:getwd()查看工作目录“文件”-“改变工作目录”改变工作目录
cat函数:
output <- file('test.txt')#file函数建立连接
cat(1:100,sep='\n',file=output)#将1:100输入文件里,注意是直接改写文件内容,不是添加。\n表示换行来分隔,可用\t等
close(output)#断开连接
3.表格输入输出
write.table(iris,file='123.csv',sep=',')#写入
read.table(file='iris.csv',sep=',')#读取
output <-file('output.txt');#链接
writeLines(as.character(1:12),con=output)#在output里面写1:12 大小写
readLines(output)#读output的内容 大小写
library(xlsx)
df <- read.xlsx("HousePriceData.xlsx",sheetIndex = 1,stringsAsFactors = F)#读xlsx
4.数据库读写(windows平台+mysql)
R装RODBC包
并且在控制面板里设置(视频里)
5.WEB数据抓取
XML包
1.抓取网页里的HTMLTable
library(XML)
url <- 'http://www.w3school.com.cn/example/xmle/cd_catalog.xml'
tables <- readHTMLTable(url,stringAsFactors = FALSE,header=F)
R语言数据汇总(plyr包)
用"reshape2"里面的tips举例子
例1.
library(plyr)
aggregate(x=tips$tip,by=list(tips$sex),FUN=mean)#x为计算什么东西,by是按什么来分,FUN就是想要的运算
#  Group.1        x
#1  Female 2.833448
#2    Male 3.089618
#求了男女小费的均值
例2.
ddply(.data=tips,.variables='sex',.fun=function(x){mean(x$tip)})
#相同的操作用ddply函数做,结果相同
例3.
myfun <- function(x){sum(x$tip)/sum(x$total_bill)}
ddply(.data=tips,#计算的对象
.variables='sex',#按什么约束变量拆分。可用多个变量,写作.(sex,smoker)
.fun=myfun)#计算的函数
#    sex        V1
#1  Female   0.1569178
#2  Male     0.1489398
#求男女小费占总账单的比例。这个操作用ddply好用
例4.each 将多个函数绑定
x<-c(1:12)
each(mean,max,min,sd)(x)
#  mean       max       min        sd 
#6.500000 12.000000  1.000000  3.605551
例5.其他辅助函数
随机生成命令:
rnorm(n, mean = 0, sd = 1)#n:产生随机数个数 mean:期望 sd:是方差
R中的数据结构(Array,Factor,List,DataFrame)
#来自CSDN的内容。http://blog.csdn.net/lll1528238733/article/details/74999557。感谢
1、R中的数据结构-Array
#一维数组  
x1 <- 1:5;  
x2 <- c(1,3,5,7,9)  
x3 <- array(c(2, 4, 6, 8, 10))  
  
#多维数组  
xs <- array(1:24, dim=c(3,4,2))  
  
#访问  
x1[3]  
x2[c(1,3,5)]  
x3[3:5]  
  
xs[2, 2, 2]  
  
xs[2, 2, 1]  
  
#增加  
x1[6] <- 6  
x2[c(7, 9, 11)] <- c(11, 13, 15)  
  
#动态增加  
x1[length(x1) + 1] <- length(x1) + 1  
append(x2, 17)  
x2 <- append(x2, 17)  
  
#修改,凡是能够访问到的地方,都可以修改  
x1[3] <- 30  
  
#删除,凡是能够访问到的地方,都可以删除  
x1[-3]  
x1 <- x1[-3]  
  
#查找/过滤  
x1[x1 >= 4]  
2、R中的数据结构-Factor
Factor因子
因子用来存储类别变量和有序变量,这类变量不能用来计算,只能用来分类或者计数。
因子(Factor):因子表示分类变量
有序因子(odered factor):有序因子表示有序变量。
[python] view plain copy
#读取学生成绩的数据  
data <- read.csv('1.csv', fileEncoding='utf8');  
#查看数  
data  
#查看第一列数据  
data[, 1]  
#把第一列数据转换为分类结构  
data[, 1] <- factor(data[, 1]);  
#查看第一列数据  
data[, 1]  
  
#作用一、统一映射为另一个标签数据  
data[, 1] <- factor(  
  data[, 1],   
  labels=c('三年一班', '三年二班', '三年三班')  
);  
#查看第一列数据  
data[, 1]  
  
#作用二、处理异常数据  
data <- read.csv('2.csv', fileEncoding='utf8');  
data  
  
data[, 1] <- factor(  
  data[, 1],   
  levels=c(1, 2, 3),  
  labels=c('三年一班', '三年二班', '三年三班')  
);  
data  
  
#转换成字符向量  
as.vector(data[, 1])   
#转换成数字向量  
as.numeric(data[, 1])   
  
#连续变量的离散化  
score <- data[,3]  
#切分成3组  
score1 <- cut(score, breaks = 3)   
table(score1)  
#切分成自己设置的组  
score2 <- cut(score, breaks = c(90, 100, 110, 120, 130, 140))   
table(score2)  
  
#一个有序因子  
scoreOrder <- ordered(  
  score2,   
  labels = c('bad', 'ok', 'average', 'good', 'excellent')  
)  
scoreOrder  
table(scoreOrder)  
  
#可排序的离散分类结构  
data <- read.csv('1.csv', fileEncoding='utf8');  
data[, 1] <- ordered(  
  data[, 1],   
  levels=c(1, 3, 2),  
  labels=c('三年一班', '三年三班', '三年二班')  
);  
table(data[, 1])  
  
data[order(data[, 1]),]  
  
data <- read.csv('1.csv', fileEncoding='utf8', stringsAsFactors=FALSE);  
data[, 2]  
2、R中的数据结构-Factor
#Factor因子
#因子用来存储类别变量和有序变量,这类变量不能用来计算,只能用来分类或者计数。
#因子(Factor):因子表示分类变量
#有序因子(odered factor):有序因子表示有序变量
#读取学生成绩的数据  
data <- read.csv('1.csv', fileEncoding='utf8');  
#查看数  
data  
#查看第一列数据  
data[, 1]  
#把第一列数据转换为分类结构  
data[, 1] <- factor(data[, 1]);  
#查看第一列数据  
data[, 1]  
  
#作用一、统一映射为另一个标签数据  
data[, 1] <- factor(  
  data[, 1],   
  labels=c('三年一班', '三年二班', '三年三班')  
);  
#查看第一列数据  
data[, 1]  
  
#作用二、处理异常数据  
data <- read.csv('2.csv', fileEncoding='utf8');  
data  
  
data[, 1] <- factor(  
  data[, 1],   
  levels=c(1, 2, 3),  
  labels=c('三年一班', '三年二班', '三年三班')  
);  
data  
  
#转换成字符向量  
as.vector(data[, 1])   
#转换成数字向量  
as.numeric(data[, 1])   
  
#连续变量的离散化  
score <- data[,3]  
#切分成3组  
score1 <- cut(score, breaks = 3)   
table(score1)  
#切分成自己设置的组  
score2 <- cut(score, breaks = c(90, 100, 110, 120, 130, 140))   
table(score2)  
  
#一个有序因子  
scoreOrder <- ordered(  
  score2,   
  labels = c('bad', 'ok', 'average', 'good', 'excellent')  
)  
scoreOrder  
table(scoreOrder)  
  
#可排序的离散分类结构  
data <- read.csv('1.csv', fileEncoding='utf8');  
data[, 1] <- ordered(  
  data[, 1],   
  levels=c(1, 3, 2),  
  labels=c('三年一班', '三年三班', '三年二班')  
);  
table(data[, 1])  
  
data[order(data[, 1]),]  
  
data <- read.csv('1.csv', fileEncoding='utf8', stringsAsFactors=FALSE);  
data[, 2] 
3、R中的数据结构-List
#数组的元素要求是同类型(不同类型会转成同一类型),List则可以组合多种不同类型的对象。一个List就像是一个JSON,一个包含很多键值对的数据结构。
#一、list的创建方式:  
  
#1、无tag的方式:  
j<-list("Joe", 55000, T)  
  
#2、带tag的方式:  
j<-list(name="Joe", salary=55000, union=T)  
  
  
#二、list中元素的访问:  
#1、list_name$tag_name  
j$name  
j$salary  
j$union  
  
#2、list_name[[tag_name]]  
j[['name']]  
j[['salary']]  
j[['union']]  
  
#3、list_name[[index]]  
j[[1]]  
j[[2]]  
j[[3]]  
  
#4、如果按照数组的访问方式,返回的是一个list  
j[2]  
j[2]$salary  
  
#5、访问标签  
labels(j)  
labels(j[2])  
  
#6、一次只能访问一个位置  
list[1:2]  
list[[1:2]]  
#Error in list[[1:2]] : object of type 'builtin' is not subsettable  
  
#三、修改list  
#1、增加,可以访问的地方,都可以增加  
j$sex <- '男'  
j[5] <- 173  
  
#2、修改,同理,可以访问的地方,都可以修改  
j$salary <- j$salary+j$salary*0.08  
  
#3、删除,把可以访问的地方,设置为NULL,即为删除,  
#注意,删除之后,它后面的位置索引都自动减一  
j$sex <- NULL;  
j  
  
#四、检索  
j=='Joe'  
  
#五、查看长度  
length(j)  
4、R中的数据结构-DataFrame
#数据框用于存储多行和多列的数据集合。可以把数据框理解为excel中的列。
#定义数据框  
age <- c(21, 22, 23)  
name <- c('KEN', 'John', 'JIMI')  
f <- data.frame(age, name);  
f  
  
#如果列没有内容,列定义是不成功的  
df <- data.frame(age=c(), name=c())  
  
df <- c(1, 2)  
#可以先赋值为NA值  
df <- data.frame(age=c(NA), name=c(NA))  
  
#数据框的变量名[行位置 ,  列位置]  
f[1,1]  
  
f[,1]  
  
f[1,]  
  
#修改列名  
names(f)  
names(f) <- c("age2", "name2")  
f  
colnames(f)  
  
names(f)[2] <- "name2"   
  
#如果不知道列序号,只是知道列名,如何修改某一列呢?  
names(f)[names(f)=='name'] <- "name2"   
  
#修改行名  
row.names(f)  
row.names(f) <- 0:2  
f  
  
#删除行  
f[-1,]  
f  
  
#注意,删除后的DataFrame需要一个变量来接收,并不会直接修改原来的  
nf <- f[-1, ]  
nf  
  
f <- f[-1, ]  
  
#删除列  
f[, -1]  
f  
nf <- f[, -1]  
nf  
  
#增加行  
f[nrow(f)+1, ] <- c(24, "KENKEN")  
f  
  
#增加列  
f[, 'sex'] <- c(0, 1, 1);  
f


打赏

暂无评论

发布评论