vlambda博客
学习文章列表

《实习日记》| ​7月21日 R语言学习笔记——tidyr

7月21日

R语言学习笔记——tidyr

7月21日R语言学习笔记——tidyr一、数据清理扁变长长变扁二、分割和合并原始数据分割合并三、处理NA原始数据1.去掉含有NA的行,可以选择只根据某一列来去除2.替换NA3.用上一行的值填充NA

一、数据清理

rm(list = ls())
options(stringsAsFactors = F)
if(!require(tidyr))install.packages("tidyr")
## Loading required package: tidyr
library(tidyr)
test <- data.frame(geneid = paste0("gene",1:4),
                sample1 = c(1,4,7,10),
                sample2 = c(2,5,0.8,11),
                sample3 = c(0.3,6,9,12))
test
##   geneid sample1 sample2 sample3
## 1  gene1       1     2.0     0.3
## 2  gene2       4     5.0     6.0
## 3  gene3       7     0.8     9.0
## 4  gene4      10    11.0    12.0

扁变长

test_gather <- gather(data = test,
                   key = sample_nm,
                   value = exp,
                   - geneid)
               #key指哪一列形成列名
               #value指哪一列为内容
head(test_gather)
##   geneid sample_nm exp
## 1  gene1   sample1   1
## 2  gene2   sample1   4
## 3  gene3   sample1   7
## 4  gene4   sample1  10
## 5  gene1   sample2   2
## 6  gene2   sample2   5


长变扁

test_re <- spread(data = test_gather,
               key = sample_nm,
               value = exp)
head(test_re)
##   geneid sample1 sample2 sample3
## 1  gene1       1     2.0     0.3
## 2  gene2       4     5.0     6.0
## 3  gene3       7     0.8     9.0
## 4  gene4      10    11.0    12.0


二、分割和合并

原始数据

test <- data.frame(x = c( "a,b", "a,d", "b,c"));test
##     x
## 1 a,b
## 2 a,d
## 3 b,c

分割

test_seprate <- separate(test,x, c("X", "Y"),sep = ",");test_seprate
##   X Y
## 1 a b
## 2 a d
## 3 b c
#x 要分的列的列名
#分成的两列的列名 c("X", "Y")
#sep = "," 分隔符是什么

合并

test_re <- unite(test_seprate,"x",X,Y,sep = ",");test_re  
##     x
## 1 a,b
## 2 a,d
## 3 b,c


三、处理NA

原始数据

X<-data.frame(X1 = LETTERS[1:5],X2 = 1:5)
X[2,2] <- NA
X[4,1] <- NA;X
##     X1 X2
## 1    A  1
## 2    B NA
## 3    C  3
## 4 <NA>  4
## 5    E  5


1.去掉含有NA的行,可以选择只根据某一列来去除

na.omit(X)#去除所有含有缺失值的行
> X1 X2
> 1 A 1
> 3 C 3
> 5 E 5


drop_na(X)
##   X1 X2
## 1 A 1
## 2 C 3
## 3 E 5
drop_na(X,X1)
##   X1 X2
## 1 A 1
## 2 B NA
## 3 C 3
## 4 E 5
drop_na(X,X2)
##     X1 X2
## 1   A 1
## 2   C 3
## 3 <NA> 4
## 4   E 5


2.替换NA

replace_na(X$X2,0)#替换第二列的缺失值为0
## [1] 1 0 3 4 5


3.用上一行的值填充NA

X
##     X1 X2
## 1   A 1
## 2   B NA
## 3   C 3
## 4 <NA> 4
## 5   E 5
fill(X,X2)
##     X1 X2
## 1   A 1
## 2   B 1
## 3   C 3
## 4 <NA> 4
## 5   E 5