|
发表于 2022-9-1 15:44:10
|
查看: 1142 |
回复: 0
背景
在使用 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、转义字符
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[1:10,1:10]
- 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$mpg >= 20 & mtcars$cyl == 4
- mtcars[mtcars$mpg >= 20 & mtcars$cyl == 4,]
复制代码
四、排序
排序需要给定排序标准,首先确定是对数字排序还是字符串排序,数字一般是按照大小顺序,字符串按照首字母顺序排序。可以对一维数据排序,也可以对多维数据排序。R 提供了 sort和 order 等排序方法,order 是对索引进行排序,在 R 中使用的更多。
- #排序
- rivers
- sort(rivers)
- sort(rivers, decreasing = T)
- rev(sort(rivers))
- order(rivers) #从小到大排序的索引值
- rivers[order(rivers)]
- rivers[order(-rivers)]
- #对二维数据排序
- mtcars$cyl
- order(mtcars$cyl)
- sort(mtcars$cyl,decreasing = T)
- order(mtcars$cyl,decreasing = T)
- mtcars[order(mtcars$cyl,decreasing = T),]
- #多个值排序
- order(mtcars$cyl,mtcars$mpg,decreasing = T)
- mtcars[order(mtcars$cyl,mtcars$mpg,decreasing = T),]
- mtcars[order(mtcars$cyl,mtcars$mpg,decreasing = c(T,F)),]
复制代码
五、修改数据内容
数据分析中经常需要对原数据中的某些地方进行修改。修改数据属于赋值操作,也就是将原有的值赋一个新的值,这就需要首先能够将要修改的值索引出来,然后重新赋值即可。如果要修改某一行或者某一列的内容,则可以先索引出这一行或一列的内容,然后批量赋值。如果需要增加或者删除某一行或者某一列,可以使用 rbind 或者 cbind 函数。
- #修改数据
- mtcars
- mtcars$cyl
- mtcars$cyl[mtcars$cyl == 4] <- 'four'
- mtcars$cyl[mtcars$cyl == 6] <- 'six'
- mtcars$cyl[mtcars$cyl == 8] <- 'eight'
- as.factor(mtcars$cyl)
- data('mtcars')
- ncol(mtcars)
- mtcars$cylinders <- NA
- mtcars$cylinders[mtcars$cyl == 8] <- 'eight cylinders'
- mtcars$cylinders[mtcars$cyl == 4] <- 'four cylinders'
- mtcars$cylinders[mtcars$cyl == 6] <- '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[duplicated(c),]
- c[!duplicated(c),]
- unique (c)
- #取子集 subset
- dta <- read.csv("gene93.csv")
- dta
- #过滤掉没有表达的转录本
- dta1 <- subset(dta,rowSums(dta[1:8])>1)
复制代码 |
|