生信喵 发表于 2022-9-1 15:44:10

数据处理

背景
       在使用 R 语言的过程中,需要给函数正确的数据结构。因此,R 语言的数据结构非常重要。通常读入的数据并不能满足函数的需求,往往需要对数据进行各种转化,以达到分析函数的数据类型要求,也就是对数据进行“塑形”,因此,数据转换是 R 语言学习中最难的内容,也是最重要的内容。

一、R 与 Linux 和 Python 相似的操作
1、获取工作目录
Linux: pwd (print word directory)
R:getwd()函数,获取工作目录
python:import os;os.getcwd()
2、清空屏幕
ctrl+L 快捷键
3、移动光标
ctrl+A:行首
ctrl+E:行尾
4、转义字符

\n:换行符
\t:制表符5、for 循环
Linux:for i in {1..10};do echo $i;done;
R:for (i in 1:10){print (i)}
for i in range(1,10):print (i);
6、head,tail
Linux: head,tail 命令,默认 10 行
R:head(),tail()函数,默认文件六行
python:import pandas as pd;pd.head(),pd.tail()函数
7、cut
Linux: cut 用来拆分文件,可以按大小,字符数,行以及分隔符来拆分;
R:可以将一个连续型向量拆分为离散型,例如0-100,拆分成0-60,60-70,70-80,80-90,90-100几份。
python:pandas 中 cut 函数,与 R 中 cut 类似。
8、grep
Linux: 用于搜索文件内的内容,支持正则表达式
R:用于搜索变量内的内容,支持正则表达式
python:用于搜索变量内的内容,支持正则表达式
9、paste
Linux: 粘贴不同文件内容,与 cut 刚好相反
R:合并不同向量,可以指定分隔符,
python:与 R 类似。
10、cat
Linux,R,python 中都是查看文件,将文件内容在终端输出。
11、sort
排序,可以按照数值大小,也可以按照 ascii 码排序。
12、printf
pirntf 主要用于格式化打印,例如可以直接在 printf 中设置保留有效数字,转换类型等,支持各种转义。
printf "姓名:%s\n 身高:%dcm\n 体重:%dkg\n" "小明" "180" "75"
姓名:小明
身高:180cm
体重:75kg

二、判断数据类型
       R中包含很多查看数据属性的函数,例如mode(),class(),str()等,此外还有is*系列函数与as系列函数。

x <- c(1:100)
x
is.vector(x)
is.numeric(x)
is.character(x)

as.character(x)
letters
as.numeric(letters)

mtcars
mtcars$cyl
is.numeric(mtcars$cyl)
as.factor(mtcars$cyl)

plot(as.numeric(mtcars$cyl))
plot(as.factor(mtcars$cyl))

x <- read.csv('heatmap.csv',row.names = 1)
head(x)
heatmap(x)
heatmap(as.matrix(x))
三、筛选
       筛选主要是将满足一定条件的内容挑选出来,例如等于某个值,或者大于,小于等,如果是字符串就是字符串的匹配。

data('mtcars')
mtcars$mpg >= 20
mtcars
mtcars$mpg >= 20 & mtcars$cyl == 4
mtcars

四、排序
       排序需要给定排序标准,首先确定是对数字排序还是字符串排序,数字一般是按照大小顺序,字符串按照首字母顺序排序。可以对一维数据排序,也可以对多维数据排序。R 提供了 sort和 order 等排序方法,order 是对索引进行排序,在 R 中使用的更多。

#排序
rivers
sort(rivers)
sort(rivers, decreasing = T)
rev(sort(rivers))
order(rivers) #从小到大排序的索引值
rivers
rivers
#对二维数据排序
mtcars$cyl
order(mtcars$cyl)
sort(mtcars$cyl,decreasing = T)
order(mtcars$cyl,decreasing = T)
mtcars
#多个值排序
order(mtcars$cyl,mtcars$mpg,decreasing = T)
mtcars
mtcars

五、修改数据内容
       数据分析中经常需要对原数据中的某些地方进行修改。修改数据属于赋值操作,也就是将原有的值赋一个新的值,这就需要首先能够将要修改的值索引出来,然后重新赋值即可。如果要修改某一行或者某一列的内容,则可以先索引出这一行或一列的内容,然后批量赋值。如果需要增加或者删除某一行或者某一列,可以使用 rbind 或者 cbind 函数。
#修改数据
mtcars
mtcars$cyl
mtcars$cyl <- 'four'
mtcars$cyl <- 'six'
mtcars$cyl <- 'eight'
as.factor(mtcars$cyl)

data('mtcars')
ncol(mtcars)
mtcars$cylinders <- NA
mtcars$cylinders <- 'eight cylinders'
mtcars$cylinders <- 'four cylinders'
mtcars$cylinders <- 'six cylinders'


mtcars$cyl <- as.factor(mtcars$cyl)
levels(mtcars$cyl)
levels(mtcars$cyl) <- c('four', 'six', 'eight')#rbind,cbind
state <- cbind(as.data.frame(state.x77),state.region)
tapply(state$Population, state$state.region, mean)
a <- head(mtcars,20)
b <- tail(mtcars,20)
c <- rbind(a,b)
length(rownames(c))
duplicated(c)
c
c[!duplicated(c),]
unique (c)
#取子集 subset
dta <- read.csv("gene93.csv")
dta
#过滤掉没有表达的转录本
dta1 <- subset(dta,rowSums(dta)>1)
页: [1]
查看完整版本: 数据处理