生信人

找回密码
立即注册
搜索
热搜: 活动 交友 discuz
发新帖

0

收听

12

听众

279

主题
发表于 2022-9-1 15:44:10 | 查看: 600| 回复: 0
背景
       在使用 R 语言的过程中,需要给函数正确的数据结构。因此,R 语言的数据结构非常重要。通常读入的数据并不能满足函数的需求,往往需要对数据进行各种转化,以达到分析函数的数据类型要求,也就是对数据进行“塑形”,因此,数据转换是 R 语言学习中最难的内容,也是最重要的内容。

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

  1. \n:换行符
  2. \t:制表符
复制代码
5、for 循环
  1. Linux:for i in {1..10};do echo $i;done;
  2. R:for (i in 1:10){print (i)}
  3. 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 中设置保留有效数字,转换类型等,支持各种转义。
  1. printf "姓名:%s\n 身高:%dcm\n 体重:%dkg\n" "小明" "180" "75"
  2. 姓名:小明
  3. 身高:180cm
  4. 体重:75kg
复制代码

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

  1. x <- c(1:100)  
  2. x
  3. is.vector(x)  
  4. is.numeric(x)
  5. is.character(x)  

  6. as.character(x)  
  7. letters
  8. as.numeric(letters)

  9. mtcars[1:10,1:10]
  10. mtcars$cyl
  11. is.numeric(mtcars$cyl)  
  12. as.factor(mtcars$cyl)  

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

  15. x <- read.csv('heatmap.csv',row.names = 1)
  16. head(x)
  17. heatmap(x)
  18. heatmap(as.matrix(x))
复制代码

三、筛选
       筛选主要是将满足一定条件的内容挑选出来,例如等于某个值,或者大于,小于等,如果是字符串就是字符串的匹配。

  1. data('mtcars')
  2. mtcars$mpg >= 20
  3. mtcars[mtcars$mpg >= 20,]
  4. mtcars$mpg >= 20 & mtcars$cyl == 4
  5. mtcars[mtcars$mpg >= 20 & mtcars$cyl == 4,]
复制代码


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

  1. #排序
  2. rivers
  3. sort(rivers)
  4. sort(rivers, decreasing = T)
  5. rev(sort(rivers))
  6. order(rivers) #从小到大排序的索引值
  7. rivers[order(rivers)]
  8. rivers[order(-rivers)]
  9. #对二维数据排序
  10. mtcars$cyl
  11. order(mtcars$cyl)
  12. sort(mtcars$cyl,decreasing = T)
  13. order(mtcars$cyl,decreasing = T)
  14. mtcars[order(mtcars$cyl,decreasing = T),]
  15. #多个值排序
  16. order(mtcars$cyl,mtcars$mpg,decreasing = T)
  17. mtcars[order(mtcars$cyl,mtcars$mpg,decreasing = T),]
  18. mtcars[order(mtcars$cyl,mtcars$mpg,decreasing = c(T,F)),]
复制代码


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

  8. data('mtcars')
  9. ncol(mtcars)
  10. mtcars$cylinders <- NA
  11. mtcars$cylinders[mtcars$cyl == 8] <- 'eight cylinders'
  12. mtcars$cylinders[mtcars$cyl == 4] <- 'four cylinders'
  13. mtcars$cylinders[mtcars$cyl == 6] <- 'six cylinders'


  14. mtcars$cyl <- as.factor(mtcars$cyl)
  15. levels(mtcars$cyl)
  16. levels(mtcars$cyl) <- c('four', 'six', 'eight')
复制代码
  1. #rbind,cbind
  2. state <- cbind(as.data.frame(state.x77),state.region)
  3. tapply(state$Population, state$state.region, mean)
  4. a <- head(mtcars,20)
  5. b <- tail(mtcars,20)
  6. c <- rbind(a,b)
  7. length(rownames(c))
  8. duplicated(c)
  9. c[duplicated(c),]
  10. c[!duplicated(c),]
  11. unique (c)
  12. #取子集 subset
  13. dta <- read.csv("gene93.csv")
  14. dta
  15. #过滤掉没有表达的转录本
  16. dta1 <- subset(dta,rowSums(dta[1:8])>1)
复制代码
您需要登录后才可以回帖 登录 | 立即注册

QQ|Archiver|手机版|小黑屋|生信人

GMT+8, 2024-5-5 01:40 , Processed in 0.050280 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表