R学习笔记 note-2

Getting started

working directory

利用getwd(),setwd()设置工作路径
利用source(‘Hello.R’)从cwd中找到文件

保存/加载工作空间:
• File-> Load/Save Workspace #菜单栏的形式操作,保存当前工作空间
• save.image(“xxx.RData) ###保存当前workspace,下次启动R自动加载
• 等价于save(list=ls(all=TRUE),file=“xxx.RData”)
• save(object, file=“xxx.RData”) ### save particular objects

Packages

• 除了R中默认安装的包,使用必须加载:
• library(nlme) ——加载相应包
• require(nlme) ——加载相应包(有返回值T/F)
• detach(package:nlme) ——移除包
• search() ——目前加载了哪些包
• .packages(all.available=TRUE) ——目前安装了哪些包

####require() & library()
利用x <- require(xxx)如果包不存在x=F,存在x=T

###获取帮助

  • help.start() 帮助菜单
  • help(xxx) / ?xxx 解释xxx这个函数
  • example(xxx) xxx的运行示例

数据输入&输出

eg1:
计算体重均值、标准差、体重与年龄的相关系数并作出体重与年龄的散点图:

age <- c(1,3,5,2,11,9,3,9,12,3)
weight <-c(4.4,5.3,7.2,5.2,8.5,7.3,6.0,10.4,10.2,6.1)
mean(weigt)
sd(weight)
cor(age,weight)
plot(age,weight)
q()

Object

R中的数据都以’对象’保存,在R中一切都是’Objects’。

age <- c(1,3,5,2,11,9,3,9,12,3)
weight <-c(4.4,5.3,7.2,5.2,8.5,7.3,6.0,10.4,10.2,6.1)
###创建了两个object, named as 'age', 'weight' respectively
  1. object命名规则
  • 字母,数字,下划线_,点.都可以作为名称,不能包含运算符;

  • 名字由字母或者点开始 不能用数字开头

  • 避免使用保留名:pi, NA, NaN…

  • objects() / ls() ### 当前工作空间中的所有对象

  • ls(pat=“m”) ### 名字包含m的所有对象

  • ls(pat=“^m”) ### 名字以m开头的所有对象

  • ls.str() ##将会展示所有对象的详细信息

  • rm(xxx) #删除某个xxx对象

  • rm(list=c(“xx”,”yy”)) #删除对象 xx,yy

  • rm(list=ls()) ### 删除(几乎)一切对象

在每个R脚本的开头,可以加上:

setwd("/Users/pzh/Documents/Sophomore 2nd/R/R Workplace")
rm(list=ls())
1.1 Object的属性
  • 对象=数据,由元素组成,元素有其数据类型
  • 字符Character:‘china’,‘1’
  • 实数Numeric: 3.14

对象的属性可以用mode(),is.xxx查看:

> x<-1
> mode(x)
[1] "numeric"
> is.integer(x)
[1] FALSE
> is.numeric(x)
[1] TRUE
> y <- is.numeric(x)
> mode(y)
[1] "logical"
> is.integer(y)
1.2 Object的类别
  • 向量:c(),vector()
    最基本的数据结构,向量必须来自同一元素:
    例如我可以x <- c(0.1,0,3) 但不能够 x <- c(TRUE,0.3)

逻辑向量:
any()#只要有一个逻辑为True,返回Ture
all()#所有逻辑均为TRUE返回TRUE

逻辑运算:

  • !(非)
  • &(与)
  • |(或)

  • 矩阵:
  • 数组
  • 数据库
  • 列表

可以用class()判断数据类型

  • 区分class()和mode()的不同:mode表示数据储存类型,class表示抽象的类别,例如data.frame键入mode()就会显示‘list’,但是键入class()会显示‘data.frame’

类型转换:as.xxx()

> x <- 0:6 或者x<- c(0,1,2,3,4,5,6) > mode(x)
[1] "numeric"
> as.logical(x)
[1] FALSE TRUE TRUE TRUE TRUE TRUE TRUE
> as.character(x)
[1] "0" "1" "2" "3" "4" "5" "6"

强制转换不一定成功,如果它失败了就会返回NA,所有无意义的强制转换都会导致NA值:

> x <- c('a','b','c')
> as.numeric(x)
[1] NA NA NA
缺失数据

• NA: 缺失数据
• NaN: 无意义的数,比如sqrt(-2) • Inf: 正无穷大,例如 1/0
• -Inf:负无穷大,例如 -1/0
• is.na() #每个元素分别判断
• is.nan() #每个元素分别判断
• A NaN value is also NA but the converse is not true

Matrix

m <- matrix(cell,nrow=2,ncol=3) ###Vector -> Matrix
v <- as.vector(m) ###Matrix -> Vector

注意R中矩阵按列形成与拆分

可以使用cbind(),rbind()对列、行进行组合适用于矩阵

> x=1:3
> cbind(1,x)
[1,] 1 1
[2,] 1 2
[3,] 1 3
> z=1:2
> cbind(z,x)
[1,] 1 1
[2,] 2 2
[3,] 1 3
###当cbind,rbind函数中的两个向量长度不一样时:R自动重复短的向量

当我们使用cbind或rbind进行矩阵的合并时,数据格式将被转换为最低的类别(实数/字符),这会造成很多不方便

数据框 Data Frames

Data Frame不同列可以是不同数据类型,并且可以通过data.matrix()/as.matrix()转化为matrix; 也可以用as.data.frame将矩阵转化为数据框
并且我们可以通过dim(),nrow(),ncol()检查其属性

> x <- data.frame(foo=1:4,bar=c(T,T,F,F))
> x
  foo   bar
1   1  TRUE
2   2  TRUE
3   3 FALSE
4   4 FALSE
> dim(x)
[1] 4 2
> nrow(x)
[1] 4
> ncol(x)
[1] 2

列表List

列表是一种广义的向量,可以包含多种属性类型的对象

  • 列表的每个位置上是任意的R对象,甚至是一个列表

元素的索引

> m <- matrix(1:16,4,4)
> m
     [,1] [,2] [,3] [,4]
[1,]    1    5    9   13
[2,]    2    6   10   14
[3,]    3    7   11   15
[4,]    4    8   12   16
> m[c(1:3),c(2)]
[1] 5 6 7

也可以用-来剔除部分变量

> m <- matrix(1:16,4,4)
> m
     [,1] [,2] [,3] [,4]
[1,]    1    5    9   13
[2,]    2    6   10   14
[3,]    3    7   11   15
[4,]    4    8   12   16
> m[-c(1:3),c(3)]
[1] 12
> m[-c(1:2),-c(2:4)]
[1] 3 4

Mar.11 R-note 2

1. input of data

1.1 input from keyboard

R中的函数edit()会自动调用一个允许手动输入数据的文本编辑器:
(1) 创建一个空数据框(或矩阵),其中变量名和变量的模式需与理想中的最终数据集一致;
(2) 针对这个数据对象调用文本编辑器,输入你的数据,并将结果保存回此数据对象中。

mydata <- data.frame(age=numeric(0)),
		gender=character(0), weight=numeric(0))
mydata <- edit(mydata)
  • 上例创建了一个名为mydata的数据框,它含有三个变量:age(数值型),gender(字符型)和weight(数值型)。

语句mydata <- edit(mydata)的一种简捷的等价写法是fix(mydata)

此外,你可以直接在你的程序中嵌入数据集,比如:

mydatatxt <- "
age gender weight
25 m 166
30 f 115
18 f 120
"
1.2 导入文本数据

你可以使用read.table()从带分隔符的文本文件中导入数据,次函数可以读入一个表格格式的文件,并将其保存为一个数据框。表格的每一行分吧出现在文件中的每一行,语法如下:
mydataframe <- read.table(file, options)

其中,file是一个带分隔符的ASCII文本文件,options赛控制如何处理数据的选项:

header: 表示文件第一行是否包含了变量名
sep 分开数据值的分隔符,默认是sep="",这表示了一个或多个空格,制表符,换行或回车。使用sep=",“来读去用逗号来分隔行内数据的问卷,使用sep=”\t"来读取使用制表符来分隔行内数据的问卷。

更多参数详见pdf page 59

考虑一个名为studentgrades.csv的文本文件,它包含了学生在数学、科学、和社会学习的分数。 文件中每一行表示一个学生,第一行包含了变量名,用逗号分隔。每一个单独的行都包含了学生 的信息,它们也是用逗号进行分隔的。文件的前几行如下:

StudentID,First,Last,Math,Science,Social Studies
011,Bob,Smith,90,80,67
012,Jane,Weary,75,,80
010,Dan,"Thornton, III",65,75,70
040,Mary,"O'Leary",90,95,92

这个文件可以用以下语句来读入成一个数据框:

grades <- read.table("studentgrades.csv", header=TRUE, row.names="StudentID", sep=",")
  • 注意用getwd()和setwd()来设置工作路径

输出结果:

grades
   First          Last Math Science Social.Studies
11   Bob         Smith   90      80             67
12  Jane         Weary   75      NA             80
10   Dan Thornton, III   65      75             70
40  Mary       O'Leary   90      95             92

我们会发现如何导入数据有很多有趣的要点:

  1. 变量名Social Studies被自动地根据R的习惯所重命名。
  2. 列StudentID现在是行名,不再有标签,也失去了前置的0。
  3. Jane的缺失的科学课成绩被正确地识别为缺失值。
  4. 我不得不在Dan的姓周围用引号包围住,从而能够避免Thornton和III之间的空格。
  5. 否则,R会在那一行读出七个值而不是六个值。
  6. 我也在O’Leary左右用引号包围住了,负载R会把单引号读取为分隔符(而这不是我想要的)。
  7. 最后,姓和名都被转化成为因子。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值