前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言入门(一)之数据处理

R语言入门(一)之数据处理

作者头像
生信real
发布2020-08-26 10:58:25
10K0
发布2020-08-26 10:58:25
举报
文章被收录于专栏:Linux基础入门Linux基础入门

写在前面:公众号又被我搁置好久,闲来无事,写写近期学的R语言吧,主要分为两个部分写,一主要为数据处理,二为ggplot作图。这两个部分将生信分析的绝大多数常用命令都讲到了,作为R语言入门是够用的,但是学海无涯,以此只是作为一个引子,想要进步还是要自己多学多练,举一反三才行。

air.hole <- c(10,12.5,12.5,12.5,……)

#产生向量,将(10,12.5,12.5,12.5,……)中的值赋予到air.hole

length(air.hole)

repeats <- rep(seq(1, 5),times = 3)

chemical <- rep(c("KNO3", "NaNO3", "H2O"), each=5)

#seq() 产生一个向量序列;rep() 重复一个对象

#rep(x,times):x是要重复的对象(例如向量c(1,2,3)),times为对象中每个元素重复的次数(如times=c(9,7,3)就是将x向量的1重复9次,2重复7次,3重复3次)

#rep(x,times)重复x,times次;使用each=来重复x元素each次;rep(c(1,2,3),2)得到1 2 3 1 2 3;rep(c(1,2,3),each=2)得到1 1 2 2 3 3

b1 = rbind(air.hole, repeats, chemical)

#rbind 将()内矩阵横着拼接显示;cbind将()内矩阵竖着拼接显示

a1 = data.frame(air.hole, repeats, chemical)

#组合成数据框

a1.1 = a1[a1$chemical=="H2O", ]

#形象的说:a1就是打开a1这个文件,a1$chemical就是定位到chemiacal==“H2O”这个位置;","就是显示显示所有符合的行

mean(a1.1$air.hole)

#求均值

b1=aggregate(a1air.hole, list(a1chemical), mean)

#aggregate(需要被计算的内容,分类项,计算函数)

aggregate(air.hole~chemical, data=b1, mean)

#aggregate(因变量~自变量,数据,计算函数)

colnames(b1) = c("chemical", "mean")

rownames(b1)=c(“a”,“b”,“c”)

#colnames():更改列标题

#rownames():更改行标题

setwd("C:/Users/CAN/Desktop/R")

#设置工作目录

getwd()

#显示当前工作目录

dir()

#显示目录内容

a1 = read.csv("R11.csv", sep = ",", header = T)

#读取R11.csv文件,header = T表示将数据的第一行作为标题

a2 = read.table("R11.txt", sep = "\t", header = T)

#读取R11.txt文件,header = T表示将数据的第一行作为标题

read.csv(file=file.choose(),header=T)

#跳出选择文件的对话框,选择文件后自动打开

head(a1)

#显示数据前6行

tail(a1)

#显示数据后6行

dim(a1)

#变量维度(几行几列)

str(a1)

#以简洁的方式显示对象的数据结构及内容

summary(a1)

#可以提供最小值、最大值、四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计

table(a1$chemical)

table(a1$chemical, useNA = "ifany")

#求因子出现的频数;table()函数默认忽略缺失值(NA),要在频数统计中将NA视为一个有效的类别,请设定参数 useNA=“ifany”

x = xtabs(air.hole ~ chemical + repeats, data = a1)

#xtabs(forula,data)根据一个公式和一个矩阵或数据框创建一个N维列联表;

#波浪号(~):用来连接公式中的响因变量(波浪号左边)和自变量(波浪号右边)

ftable(x)

#ftable(table):创建一个紧凑的”平铺“式列联表

object.size(x)

print(object.size(x), units = "Kb")

#显示文件大小

a1[1,] #显示a1第一行数据

a1[,3] #显示a1第三列数据(横着显示)

a1[3] #显示a1第三列数据(竖着显示)

a1[2,3] #显示a1第二行第三列的数据

a2 = a1[,1:3] #显示a1第一列到第三列内容

e = t(a1) #t(x)转置

f = as.data.frame(a1) #对象类型转变为数据框

mode(f)

#查看对象x的模式:空(NULL),数值(numeric),字符(character),逻辑(logical),复数(complex),列表(list),函数(function)

class(f)

#查看对象x的类型:除了mode里列出的几种类型外,还有整数(integer),矩阵(matrix),因子(factor),阵列(array),数据框(data frame),时间序列(ts) 等其他类型。mode主要用于区别数据存放的方式,而class是一种更细微的分类方式,比如矩阵,就是一种更“有序”的数据存放方式。此命令比mode常用。

write.table(f, "R11.txt", sep = "\t", row.names = FALSE)

write.csv(f, "R11.csv", row.names = F)

#将f的内容写入R11中;row.names=F 表示不把行名称读进去;sep="\t" 表示以tab(制表符\t)为分隔符

remove(list = ls())

#清除全部对象,即用ls()列出全部对象名,用一个list将全部对象装进里面,rm()全部清除

#去重复

a.distinct = dplyr::distinct(a1, Species)

#将species这一列中所有项均显示一遍(只显示这一列),重复的只显示第一个

a2 = a1[!duplicated(a1$Species), ]

#删除species这一列的重复项,默认保留第一次出现的

!duplicated(a1$Species)

#duplicated函数是一个可以用来解决向量或者数据框重复值的函数,它会返回一个TRUE或FALSE的向量,以标注该索引所对应的值是否是前面数据所重复的值。

#数据排序

a2[order(a2$Sepal.Length), ]

dplyr::arrange(a2, Sepal.Length)

#对a2数据中Sepal.Length升序排序

a2[order(a2$Sepal.Length, decreasing = T), ]

dplyr::arrange(a2, desc(Sepal.Length))

#对a2数据中Sepal.Length降序排序

a2[order(a2Sepal.Length, a2Sepal.Width), ]

dplyr::arrange(a2, Sepal.Length, Sepal.Width)

#对a2数据中Sepal.Length升序排序,若相同,则按照Sepal.Width升序排序

dplyr::arrange(a2, Sepal.Length, desc(Petal.Length))

#对a2数据中Sepal.Length升序排序,若相同,则按照Sepal.Width降序排序

#数据筛选

a2[ a2$Sepal.Length >= 7, ]

subset(a2, Sepal.Length >=7)

dplyr::filter(a2, Sepal.Length >=7)

#筛选a2数据中所有符合Sepal.Length >=7的行

a2.2 =subset(a1, Species == "setosa" & Sepal.Length > 5.5)

a2.2 = dplyr::filter(a1, Species == "setosa" & Sepal.Length > 5.5)

#筛选a1数据中所有符合Species == "setosa”和Sepal.Length > 5.5的行

d= dplyr::filter(a1, (Species == "setosa" | Species == "versicolor")

& Petal.Length>1.5)

#筛选a1数据中所有符合Species == "setosa" 、 Species == "versicolor"和Petal.Length>1.5的行

#数据特定列的选择

a2.2[, c("Species", "Sepal.Length", "Sepal.Width")]

a2.2[,c(5,1,2)]

dplyr::select(a2.2, 5, 1:2)

dplyr::select(a2.2, Species, Sepal.Width, Sepal.Length)

#筛选a2.2数据中标题为"Species", "Sepal.Length", "Sepal.Width"的列,数字为列数

#数据列的选择

dplyr::select(a2.2, Species, contains("Sepal"))

#筛选a2.2数据中标题包括"Sepal"、标题为"Species"的列

dplyr::select(a2.2, -contains("Petal"))

#筛选a2.2数据中标题不包括"Sepal"的列

dplyr::rename(a2.2, Flower = Species)

#将a2.2数据中的Species标题改成Flower后显示

a2.4.1 = dplyr::select(a2.2, Flower = Species, Sepal.Length, Sepal.Width)

#筛选a2.2数据中Species、Sepal.Length、Sepal.Width这三列,同时将Species改成Flower

#列的合并

d1$Quality = "NAU"

#在d1数据后加一列,列的名称为Quality,内容均为"NAU"

d1group = paste0(d1Flower,"_",d1Quality, "=",d1

#在d1数据后加一列,列的名称为group,内容为每行的”Flower_Quality=Sepal.Length”

d1condition = paste(d1Flower, d1

#在d1数据后加一列,列的名称为condition ,内容为每行的”Flower_Quality”

#列的拆分

library(splitstackshape)

cSplit(d1, splitCols = "group", sep = "_", drop = F,

fixed = T, direction = "wide", makeEqual = T)

#将d1中group这一列进行分割。drop=F,结果中显示group,T则不显示。

#宽表格转变为长表格

library(reshape2)

b1 = melt(data = a1, id.vars = "Fruits",

variable.name = "store",

value.name = "price" )

a1$location = c("NJ","NJ","SZ","SZ","SZ")

d1 = melt(data = a1, id.vars = c("Fruits","location"),

variable.name = "store", value.name = "price" )

#id.vars:标识变量(依旧在列上,位置保持不变的变量);variable.name:为新列变量取名; value.name:对应值所在的变量名

#长表格转变为宽表格

b2 = reshape(data = b1, idvar = "Fruits",

timevar = "store", direction = "wide")

dcast(b1, Fruits ~ store, fun.aggregate = mean, margins = T)

#左边为行标签,右边为列标签;fun.aggregate:聚集函数,如 mean、median、sum;示例 为对行和列进行求平均数;margins=T,加上后显示平均数这一列和行,不加不显示

d2.1 = reshape(data = d1, idvar = c("Fruits", "location"), timevar = "store", direction = "wide")

d2.2 = dcast(d1, Fruits + location ~ store )

library(dplyr)

a1 = read.csv("microbiology.csv", header = T, stringsAsFactors = F)

a2 = read.csv("published_papers.csv", stringsAsFactors = F)

#指的是读入的数据中的字符串数据是否要变成属性数据,stringsAsFactors=FALSE就是不变

成属性数据,按字符串读入。比如‘sex’变量有Fale,Female两种,可以只当做字符串,也可

作为属性变量。

header = T,true则excel第一行用于列名称,具体数据从第二行开始;false则第一行即为

具体数据。

a1=microbiology

a2=published_papers

a3 = merge(a1, a2, by.x = "magazine", by.y = "Journal")

a3.1 = dplyr::inner_join(a1, a2, by = c("magazine" = "Journal"))

#merge 函数类似于 Excel 中的 Vlookup,可以实现对两个数据表进行匹配和拼接的功能;by.x,by.y:指定依据哪些行合并数据框,默认值为相同列名的列

a3.2 = merge(a1, a2, by.x = "magazine", by.y = "Journal", all.x = TRUE)

a3.2 = dplyr::left_join(a1, a2, by = c("magazine" = "Journal"))

a3.3 = merge(a1, a2, by.x = "magazine", by.y = "Journal", all.y = T)

a3.3 = dplyr::right_join(a1, a2, by = c("magazine" = "Journal"))

round(a3$Journal.Impact.Factor, 2)

#a3中Journal.Impact.Factor保留小数点后两位

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信real 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档