R软件学习笔记-3(简单运算)

merge合并函数

###################################数据合并

ReportCard1<-read.table(file="ReportCard1.txt",header=TRUE)   #从文本读数据到数据框
ReportCard2<-read.table(file="ReportCard2.txt",header=TRUE)

ReportCard<-merge(ReportCard1,ReportCard2,by="xh")            #合并数据并存入指定的数据框


order排序函数

######################数据排序
Ord<-order(ReportCard$math,na.last=TRUE,decreasing=TRUE)       #按math的降序排序

a<-ReportCard[Ord,]                                            #将排序结果保存在数据框a 

Ord<-order(+ReportCard$sex,-ReportCard$math,na.last=TRUE)     #按sex升序、math降序排序


is.na缺失函数

################缺失数据报告
a<-is.na(ReportCard$math)                #判断哪个学生的math成绩为缺失NA
ReportCard[a,]                           #显示math缺失NA的学生信息
a<-complete.cases(ReportCard)            #判断完整观测样本
ReportCard[!a,]                          #显示有任何一门成绩缺失的学生信息

install.packages("mice")         #下载安装包
library("mice")                  #加载包mince
md.pattern(ReportCard)           #生成缺失报告

na.omit剔除缺失函数
ReportCard<-na.omit(ReportCard)   #剔除有缺失的样本,得到完整观测样本


基本算术运算

#计算每个人的总分和平均分,并加入到数据框ReportCard中,P62
attach(ReportCard)                #简化数据框中域名的书写
SumScore<-poli+chi+math+fore+phy+che+geo+his    #计算总分
detach(ReportCard)
AvScore<-SumScore/8                             #计算平均分
ReportCard$sumScore<-SumScore                   #将总分放入数据框
ReportCard$avScore<-AvScore
names(ReportCard)

sum(is.na(ReportCard$sumScore))                #计算总分为缺失值的观测样本数
mean(complete.cases(ReportCard))               #计算完整观测样本的比例


dnorm标准正态分布

#############基本计算中的概率函数
x<-seq(from=-3,to=3,by=0.05)
y<-dnorm(x,0,1)                                #计算正态概率密度函数
plot(x,y,type="l",ylab="密度",main="正态分布的密度函数曲线图") 


#################变量值的重编码                      即: 将学生的平均成绩分为5组,分组后的变量为分类型变量,以因子方式组织
ReportCard<-within(ReportCard,{              #利用within函数修改域中数据
 avScore[avScore>=90]<-"A"                   #“avScore>=90”的结果为逻辑型位置向量,取值为TRUE的元素赋值为A
 avScore[avScore>=80 & avScore<90]<-"B"  #此式等价于:ReportCard$avScore[avScore>=80 & avScore<90]<-"B"
 avScore[avScore>=70 & avScore<80]<-"C"
 avScore[avScore>=60 & avScore<70]<-"D"
 avScore[avScore<60]<-"E"
 })

 %in%函数判断是否在该范围内,返回逻辑向量
flag<-ReportCard$avScore %in% c("A","B","C","D","E")     #位置向量flag,%in% 的结果为逻辑型向量
ReportCard$avScore[!flag]<-NA                            #处理缺失值,对平均分等级不在A,B,C,D,E中的样本,强行赋予等级值NA


自定义函数

##############定义用户自定义函数
MyFun<-function(dataname1=x1,dataname2=x2,key=c){        #函数名MyFun,三个变量分别为:dataname1,dataname2,key
 result<-merge(dataname1,dataname2,by=key)
 return(result)
}

调用自定义函数

MyData<-MyFun(dataname1=ReportCard1,dataname2=ReportCard2,key="xh")      #调用函数,三个变量赋值:ReportCard1,ReportCard2,xh
MyData<-MyFun(ReportCard1,ReportCard2,"xh")                              #调用函数的简便写法


矩阵基本运算

(m1<-matrix(1,nrow=2,ncol=2))
(m2<-matrix(2,nrow=2,ncol=2))
(mm1<-cbind(m1,m2))                   #将矩阵m1和m2做列向合并
(mm2<-rbind(m1,m2))                   #将矩阵m1和m2做行向合并
(mm3<-mm1%*%mm2)                      #矩阵的乘法,注意乘积的位置

结果如下

> (m1<-matrix(1,nrow=2,ncol=2))
     [,1] [,2]
[1,]    1    1
[2,]    1    1
> (m2<-matrix(2,nrow=2,ncol=2))
     [,1] [,2]
[1,]    2    2
[2,]    2    2
> (mm1<-cbind(m1,m2))                   #将矩阵m1和m2做列向合并
     [,1] [,2] [,3] [,4]
[1,]    1    1    2    2
[2,]    1    1    2    2
> (mm2<-rbind(m1,m2))                   #将矩阵m1和m2做行向合并
     [,1] [,2]
[1,]    1    1
[2,]    1    1
[3,]    2    2
[4,]    2    2
> (mm3<-mm1%*%mm2)                      #矩阵的乘法,注意乘积的位置
     [,1] [,2]
[1,]   10   10
[2,]   10   10
> (mm3<-mm2%*%mm1)
     [,1] [,2] [,3] [,4]
[1,]    2    2    4    4
[2,]    2    2    4    4
[3,]    4    4    8    8
[4,]    4    4    8    8


> diag(8)  #创建8乘8的单位阵,P66
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    0    0    0    0    0    0    0
[2,]    0    1    0    0    0    0    0    0
[3,]    0    0    1    0    0    0    0    0
[4,]    0    0    0    1    0    0    0    0
[5,]    0    0    0    0    1    0    0    0
[6,]    0    0    0    0    0    1    0    0
[7,]    0    0    0    0    0    0    1    0
[8,]    0    0    0    0    0    0    0    1
> diag(c(1,2,3,4))                      #创建对角阵
     [,1] [,2] [,3] [,4]
[1,]    1    0    0    0
[2,]    0    2    0    0
[3,]    0    0    3    0
[4,]    0    0    0    4
> diag(c(1,2,3,4),nrow=3,ncol=4)  
     [,1] [,2] [,3] [,4]
[1,]    1    0    0    0
[2,]    0    2    0    0
[3,]    0    0    3    0

> diag(mm3)                             ##提取矩阵mm3的正对角元素
[1] 2 2 8 8
> diag(mm3)<-10                         #将矩阵mm3的正对角元素均改为10
> mm3
     [,1] [,2] [,3] [,4]
[1,]   10    2    4    4
[2,]    2   10    4    4
[3,]    4    4   10    8
[4,]    4    4    8   10
> diag(mm3)<-c(1,2,3,4)                 #将矩阵mm3的正对角元素改为1,2,3,4
> mm3
   
     [,1] [,2] [,3] [,4]
[1,]    1    2    4    4
[2,]    2    2    4    4
[3,]    4    4    3    8
[4,]    4    4    8    4

> (mm3<-matrix(1:9,nrow=3,ncol=3,byrow=TRUE))
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
> t(mm3)                                #转置矩阵
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

> mm3<-diag(c(1,2,3,4))
> solve(mm3)                           ##求矩阵mm4的逆矩阵

     [,1] [,2]      [,3] [,4]
[1,]    1  0.0 0.0000000 0.00
[2,]    0  0.5 0.0000000 0.00
[3,]    0  0.0 0.3333333 0.00
[4,]    0  0.0 0.0000000 0.25
> eigen(mm3)                           ##求矩阵的特征值和特征向量
$values
[1] 4 3 2 1
$vectors
     [,1] [,2] [,3] [,4]
[1,]    0    0    0    1
[2,]    0    0    1    0
[3,]    0    1    0    0
[4,]    1    0    0    0

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑子小明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值