美文网首页R语言
R_数据处理_basic

R_数据处理_basic

作者: 1998962ab991 | 来源:发表于2017-08-13 11:41 被阅读79次

数据结构

数据结构:向量、矩阵、数组、数据框、因子、列表

向量

  • 用于储存数值型、字符型逻辑性数据的一维数组
    • 同一向量中的数据必须为同一模式;例如同为数值型
  • 通过方括号[ ] 给定元素所处位置的数值来访问向量中的元素

标量:只含一个元素的向量

a[1]

a[2:6]

a[c(2,4)]

矩阵&数组

  • 矩阵:二维数组,每个元素都拥有相同的模式(数值型、字符型、逻辑型)
    • 使用方括号[]和下标 来选择矩阵中的行、列或元素
    • matrix(vector, nrow=n1, ncol=n2, byrow=FALSE, dimnames=list(rnames, cnames))

nrow/ncol = n,表示行列的数量,即维度

byrow = FALSE(默认), 按列填充

dimanems=list() : 可选的,以字符型向量命名的行名与列名

x<- matrix(1:10, nrow=2)

x[2,]
x[1,4]
x[1,c(4,5)]
  • 数组:任意维度的向量;是矩阵的自然推广
    • array(vector, dimensions, dimnames=list())

数据框

  • 不同的列可以包含不同模式(数值型、字符型等)的数据,通常用data.frame()创建
  • 通过方括号[ ]$ 以及 attach()&detach() 或 with()进行选取
    • 列所处位置的数值
    • 指定列名
    • 运用with()进行数据框绑定,用花括号{ }来指定对数据框执行的语句;
      • 对象仅存在于with()结构以内
      • 若要创建with()结构以外也存在的对象,使用特殊赋值符号<<替代标准的赋值符号< ;可以将对象保存在全局环境中
## 指定 列所处位置的数值
patientdata[1:2]  

## 指定列名
patientdata[c("disbetes", "status")]

patientdata$diabetes

## --------with()绑定数据框-----------------------#
with(mtcars, {
  stats <- summary(mpg)
  stats
})

列表

  • 列表:任意对象的有序集合;列表允许若干个对象到单个对象名下。(即列表可能是向量、矩阵、数据框,甚至是其他列表的组合)
    • 通过双重括号[[ ]]中指名代表某个成分的数字或名称来访问列表中的元素
    • list(name1 = object1, name2 = object2)
mylist[[2]]
mylist[['age']]
mylist$age

结构判断

  • str():返回对象整体数据结构

  • class():返回单个对象格式/类型

  • mode():返回对象模式

  • dim():返回对象维度

  • summary():统计摘要;区别对待不同类型的数据变量- (1)数值型:相关极值等信息;(2)名义型/有序型:显示的是各水平的频数值

数据类型

因子

变量类别型变量(名义型、有序型)和连续型变量;

  • 名义型变量:没有顺序之分的 [类别型] 变量
  • 有序型变量:一定顺序的 [类别型] 变量
  • 连续型变量:呈现某个范围内的任意值,并同时表示了顺序和数量
  • <u>[名义型、有序型] 变量在R中称为 [因子] (factor)</u>
  • 函数factor() 以一个整数向量的形式存储类别值,范围为[1..k](k是名义型变量中唯一值的个数),同时一个字符串(原始值)组成的 内部向量 映射到这些整数
  • facotr(x, ordered=FALSE, levels=c(), labels=c(), exclude=NA)

ordered = FALSE(默认);若为TRUE,则为有序型变量

  • 对字符型向量,默认顺序按 英文字母顺序创建 [a-z]

levels=c():覆盖默认排序的顺序;保证指定的水平与数据中的真实值相匹配,因为任何在数据中出现而未在参数列举中的数据都会被设为缺失值

labels=c():将有序型变量转化为名义型变量

  • 标签的顺序必须和因子水平的顺序相一致;
  • 所有不一致的变量将被设为缺失值NA

exclude =NA:转变为因子时排除在外的变量,即不参与有序化;

> diabetes<- c('type1','type2','type1','type1')
> diabetes <- factor(diabetes);diabetes
[1] type1 type2 type1 type1
Levels: type1 type2

# --------有序型因子,order=T------------------------------#
> status <- c('poor','improved','excellent','poor')
> status <-factor(status, ordered=T);status
[1] poor      improved  excellent poor     
Levels: excellent < improved < poor

# 覆盖原有的因子顺序 -- levels=c()为指定的顺序
status <-factor(status, ordered=T, levels=c('poor','improved','excellent'));status
[1] poor      improved  excellent poor     
Levels: poor < improved < excellent

# levels中的值必须在数据中出现;  参数中为出现的值默认被设置NA
> status <-factor(status, ordered=T, levels=c('poor','improved','x'));status
[1] poor     improved <NA>     poor    
Levels: poor < improved < x

# 变更为无序因子(名义型变量)
> status; 
[1] poor      improved  excellent poor     
Levels: excellent < improved < poor
factor(status, labels=c(1,2,3))  # 标签的顺序必须和因子水平的顺序相一致
[1] 3 2 1 3
Levels: 1 < 2 < 3

#  因子化时排除某个变量
> x <- factor(c(1, 2, 3), exclude = 3); x
[1] 1    2    <NA>
Levels: 1 2

语句diabetes <- factor(diabetes) 将此向量存储为(1,2,1,1)(以一个整数向量的形式存储类别值,范围为[1..k]),并在内部将其关联为 1 = type1 和 2 =type2(具体赋值根据字母顺序而定)

针对向量diabetes进行的任何分析都会将其作为名义型变量对待,并自动选择适合这一测量尺度的统计方法

语句status <-factor(status, ordered=T) 将向量存储为(3,2,1,3),并在内部关联为 1=excellent, 2=improved, 3=poor

数据类型 & 转换

  • 数值型 - is.numeric() & as.numeric()

    • 整数型 is.integer() & as.integer()
    • 双精度型 is.double() & as.double()
  • 字符串形式 is.character() & as.character()

  • 逻辑型 is.logical() & as.logical()

  • 因子型 is.factor() & as.factor()

as.factor(x) -- 只能对整个数据/列进行转换,其中无法插入其他语法

在作图时因子化需用 factor

  • 向量型 is.vector() & as.vectro()
  • 矩阵型 is.matrix() & as.matrix()
  • 数组型 is.array() & as.array()
  • 数据框型 is.data.frame() & as.data.frame()
# 多列变更
data[,col:col] <- lappy(gb[,col:col], as.numeric)
# gb[,c("net_activation","total_income")] <- lapply(gb[,c("net_activation","total_income")], as.numeric)

数据选取

元素选取

负号表示排除

##  负号:表示排除某一列
mtcars[,-1]  #  表示排除第一列


## 向量的选取
# 位置选取
a[2]; a[1:6]; a[c(1,4)];
# 判断选取
a[a>2]; a[a==2]

## 矩阵&数据框选取
# 位置选取
a[1,]; a[,1]; a[1,2]; a[1, c(4,5)]

## 数据框选取
# 位置选取
mtcars[1,];  mtcars[,1];  mtcars[1:2,];  mtcars[,1:2]
mtcars[1:2]  # 默认选取列,选取1与2列
mtcars[1:2, 3:4]
mtcars[c('wt')];  mtcars[1:2, c('wt','hp')]
mtcars$hp  # 运用 $ 进行选取

逻辑选取

  • 逻辑选取,后端运行分为两步
    1. 根据已有的条件对每个对象进行判断,结果为TRUE或FALSE
    2. 指定某个对象中提取为TURE的值
      • <u>该对象的类型必须与条件判断的对象类型相同</u> 或者说 <u>前的范围必须 $\le$ 后者</u>

mtcars$wt[mtcars$carb==2] :选取carb为2的wt列;注意,wt与carb的对象均为列;

mtcars[mtcars$carb==2] :会报错,提示undefined columns selected ;此时前者范围大于后者;<u>因为mtcars有n列,但逻辑为TRUE的只有一列,无法判断应该选取哪一列,故报错。</u>

mtcars$carb[mtcars>2]: 可以运行;不满足的部分用NA显示

# 逻辑判断选取
mtcars[mtcasr>10]
mtcars$hp[mtcars>10]

子集选取 - subset

  • subset(x, subset, select, drop = FALSE, ...)
    • S3 method for class 'data.frame'

subset :选取的逻辑表达式;选取条件

select :选择的列

subset(airquality, Temp > 80, select = c(Ozone, Temp))
subset(airquality, Day == 1, select = -Temp)
subset(airquality, select = Ozone:Wind)


控制流

重复和循环

  • for结构for (var in seq) statement
    • 循环执行某语句statement,直到某个变量var的值不在包含在序列seq中为止
for (i in 1:10) print("hello")
  • while结构while (cond) statment
    • 必须确保cond中的条件语句能【被改变】(即它在某个时刻不在为真),否则循环将永不停止

条件执行

表示相等==

  • if-else结构if (cond) statement 或者 for (cond) statement1 else statement2
if (!is.factor(grade)) gerade <- as.factor(grade) else print("Grade already is a factor")
  • ifelse结构ifelse(cond, statement1, statement2)
ifelse(sorce>0.5, print("Passed"), print("Failed"))
outcome <- ifelse(socre>0.5, "Passed", "Failed")
  • switch结构:根据一个表达式的值选择语句执行switch(expr,...)

expr之后的…是expr的可能取值,后接等号(=),表示执行的行为

switch语句中,不同条件末尾要有 [逗号]

若expr为文本形式,输入时需加 [引号]

feelings <- c("sad", "afraid")
for (i in feelings)
  print(
    switch(i,
          happy  = "I am glad you are happpy",  # 用逗号分隔
          afraid = "There is nothing to fear",
          sad    = "Cheer Up",
           angry = "Calm down now"
          )
  )

逻辑判断

  • which(): 返回为真的逻辑对象,允许对数组array使用

自编函数

  • 结构
myfunction <- function(arg1, arg2, ...){
  statements
  return(object)
}

实用函数

  • length(x):对象x的长度
  • seq(from, to, by):生成一个序列
  • rep(x, n):将x重复n次
  • cut(x, n):将连续型变量分为n个水平的因子
  • ptetty(x, n):将连续型变量分为n个区间
  • cat(..., file="myfile", append=FALSE):连接...的对象,并将其输出到屏幕上或文件中
> cat("hello", "bob", "\b.\n", "Is\'t R", "\t", "Great?\n","!")
hello bob.
 Is't R      Great?
 !

cat( ) 与 paste( ) 相同与区别

  • 区别:
    • paste( ) 对应的列单独合并
    • cat( ) 合并为一个单元格
paste(c("X","Y"),1:10,sep="")
# [1] "X1"  "Y2"  "X3"  "Y4"  "X5"  "Y6"  "X7"  "Y8"  "X9"  "Y10"

cat(c("X","Y"),1:10,sep="")
# XY12345678910

funs的用法

  • 直接在函数中写明需要运行的函数 summarise(., vars(), mean)
  • 结合funs写出调用的函数 summarise(., vars(), funs(mean))
summarise_all(df1[,-1],funs(mean,sum)) # 若出现两个及以上的函数,列名中自动添加后缀
summarise_all(df1[,-1],funs(sum(.*2))) # 所有数据用.表示
summarise_all(df1[,-1],funs(medi=median)) # 指定得到的列后缀名, 函数仍为miedan
summarise_all(df1[,-1],funs("in"=median)) # 或者加引号 (因为in在R中表示其他含义)
mutate_all(df1[,-1],funs(.^2))

关于报错

  • This function should not be called directly :该函数在多个包中有同样的名字
    • 指定某个包的函数 dplyr::summarise()
    • 移除某个包 detach(package:plyr)

符号的使用

基本符号

  • ( )定义函数的参数
  • ( )在运算中作为优先级
  • [ ] 用做对象的元素索引
  • { } 作为代码段落的起止
  • %in% 表示包含
  • 用分号;来分隔两个代码;
> x <- "AAABBBCCC"
> str_sub(x, 1, 1) <- 1;  x
[1] "1AABBBCCC"

常见符号

正则表达式的pattern时,要用两个转义符来进行转义\\,因为r中一个\本身就是转义符的意思

**Windows下路径要用斜杠/或者双反斜杠\\ **,原因同上

名称 作用 示例
<- 赋值符号
\ 转义符
[ ] 给定元素所处位置的数值 a[c(2,4)]
用于表示一个数值序列 a[2:6]
[i,j] 选择指定的行与列 [i,][,j] [i,j][,]
"" 用于目录名、文件名、包
' ' 引用双引号的文字为文本时出现 labs(title=' positon="fill" ')
# 用于注释。#之后出现的任何文本都会被R解释器忽视; 并且R只能对单行进行注释,故当出现多条命令符,需在每行前面加上#
$ 选取一个给定数据框中的某个特定变量 patientIDdata$age
<<- 特殊赋值符
[[ ]] 用于列表中选取对象 mylist[["ages"]] mylist[[2]]
^或** 求幂
x% %y 求余数(x mod y) 5%%2=1
x% / %y 整数除法。5%/2%=2
== 严格等于(在浮点型数值时慎用==) 2+2==4
!= 不等于
!x 非x
x∣y x或y
x&y x和y
isTRUE(x) 测试x是否为TRUE
[,-1][-1,] [,c(-2,-3)]/[,-c(2,3)] 删除第一列 删除第一行 删除多列,两种表达方式均可 mydata<-mydata[,-1] mydata<-mydata[,-c(2,3)]
"[" 提取谋而对象一部分的函数,后跟序列数n;1表示该对象的第一部分; 2表示该对象的第二部分;

R中常见表达式

符号 作用 示例 解释
分隔符号 y~x+z+w 左边-因变量/响应变量 右边-自变量/解释变量
+ 分隔预测变量
预测变量的交互项 y~x+z+x:z
* 所有可能交互项的表达方式 y~xzw---y~x+z+w+x:z+x:w+z:w
^ 交互项的某个次数 y~(x+z+w)^2---y~x+z+w+x:z+x:w+z:w 交互项最高次为2次
. 包含除因变量之外的所有变量 y~.---y~x+z+w 当一个数据框包含y,x,z,w这四个变量时
- 减号,从等式中移除某个变量 y~(x+z+w)^2-x:w--- y~x+z+w+x:z+z:w
-1 删除截距项 y~x-1 拟合y在x上的回归,并强制直线通过原点
I() 【大写的i】 从算术(而非表示式)的角度来解释括号中的元素 y~x+I((z+w)^2) 表示的是x+(z+w)²,而非x+z+w+z:w
function 可以在表达式中运用的数学函数 log(y)~x+z+w
mpg ~ wt | cyl 表示按条件(cyl)绘图; 即按cyl的水平为【分组条件】分别绘制mpg和wt的关系图

<Br>

研究设计表达式

表达式 作用 解释
y~A 单因素ANOVA 1.小写字母,定量变量 2.大写字母,组别因子(若不转换为factor,则默认为定量协变量) 3.Subject,被试者独有的标志变量 4.Error(Subject/A),表示组内因子
y~x+A 含单个协变量的单因素ANCOVA
y~A * B 双因素ANOVA 展开为 ~A+B+A:B
y~x1+x2+A*B 含两个协变量的双因素ANCOVA
y~B+A(B是区组因子) 随机化区组
y~A + Error(Subject/A) 单因素组内ANOVA
y~B*W+Error(Subject/W) 含单个组内因子(W)和单个组间因子(B)的重复测量ANOVA 展开为 ~B+W+B:W

字符规则

引用符 字符 含义
Quotes \n newline;换行
Quotes \r carriage return
Quotes \t tab;制表符
Quotes \b backspace;空格
Quotes \a alert (bell)
Quotes \f form feed
Quotes \v vertical tab
Quotes \ backslash \
Quotes ' ASCII apostrophe '(单引号)
Quotes " ASCII quotation mark "(双引号)
Quotes ` ASCII grave accent (backtick) `
Quotes \nnn character with given octal code (1, 2 or 3 digits)
Quotes \xnn character with given hex code (1 or 2 hex digits)
Quotes \unnnn Unicode character with given code (1--4 hex digits)
Quotes \Unnnnnnnn Unicode character with given code (1--8 hex digits)

相关文章

  • R_数据处理_basic

    数据结构 数据结构:向量、矩阵、数组、数据框、因子、列表 向量 用于储存数值型、字符型或逻辑性数据的一维数组。同一...

  • JavaScript基础

    [Basic] 类型判断 [Basic] 作用域 [Basic] 引用传递 [Basic] 内存释放 [Basic...

  • R_数据处理_dplyr&reshape2&ti

    dplyr:轻松地处理data.frame, data.table以及多种数据库为基础的数据,实现选择、变换、分组...

  • R_生存分析

    基本知识 生存分析:研究各个因素与生存时间有无关系以及关联程度大小。可拓展到疾病复发时间,机器的故障时间等。起始事...

  • R_数据集

    数据集 在R中按照个人要求的格式来创建含有研究信息的数据集包括以下两步: 选择一种数据结构来存储数据; 将数据...

  • R_数据框

    生成矩阵的方法 ···· R x=c(1,4,5,23,5,7,6)x[1] 1 4 5 23 5 7...

  • NumPy API(九)——输入和输出索引相关 API

    索引相关API 另见: Indexing 生成索引数组 c_ 将切片对象转换为沿第二轴的连接。 r_ 将切片对象转...

  • Taking the Human out of Learning

    Introduction BASIC TECHNIQUES FOR OPTIMIZER BASIC TECHNIQ...

  • Flutter之Route and Navigator

    Route and Navigator Basic usage The basic use of the Navi...

  • 商务英语 Level 5 Unit 2 Part 5 Voca

    Vocabulary【Basic Concepts】 Supply and demand are basic co...

网友评论

    本文标题:R_数据处理_basic

    本文链接:https://www.haomeiwen.com/subject/xansrxtx.html