一、Reshape Data
gather()
和spread()
是一对互补命令。
gather()
把多列合并成新的两列,一列“值”和一列“名”,“名”的名,需要自己定义,"名”的值是合并前的列的名字的向量,“值”的名,需要自己定义,“值”的值是合并前的列的值的向量。而spread()
是一个反向的操作。
library(nycflights13)
smallfights <- flights[1:10, -(1:10)]
a <- gather(smallflights, key = "dest_air_time", value = "non", dest, air_time) #字符串和数值也可以合并
str(a)
b <- spread(a, dest_air_time, non)
str(b) #注意,此时的air_time已经变成chr,非之前的num了。
二、Split Cells
separate()
/separate_rows()
和 unite()
是一对互补命令,他们与gather()
spread()
的区别是,前者是对列内的单元格进行分解和合并,分解需要分隔符,如无分隔符,将产生NA数据。
d <- unite(smallfights, dest_air_time, dest, air_time) #不加其他参数
(e <- separate(d, dest_air_time, into = c("dest", "air_time")))
d <- unite(smallfights, dest_air_time, dest, air_time, sep = "") #无分隔符
(e <- separate(d, dest_air_time, into = c("dest", "air_time"))) #产生了NA值
(diff_d <- (unite(e, dest_air_time, dest, air_time)))
f <- spread(d, hour, minute) #两组命令的比较
(g <- gather(spread(d, hour, minute), key = "hour", value = "minute","5","6"))
(h <- gather(spread(d, hour, minute), key = "hour", value = "minute","5","6", na.rm = T))
三、Handle Missing Values
有三个函数,drop.na()
, fill()
, replace_na()
,分别是删除空值,根据上一行的值填充空值,特定值填充空值。
X <- read.csv("doudou.csv") X[4,1] <- NA drop_na(X) drop_na(X, X1) drop_na(X, X2) fill(X, X2) replace_na(X, list(X1 = 2)) replace_na(X, list(X2 = 2)) replace_na(X, list(X1 = "A")) replace_na(X, X1 = 2)
四、Expand Tables
快速生成表格,两者区别在于,complete函数不减少变量数量,通过data后面的参数(可为1-lenth()
个)的组合或者nesting设置的组合,产生了新的没有出现的排列,参数里的变量已经赋值,但参数以外的值都设定为NA,fill可以对其赋值。而expand函数生成的数据的变量数目依赖于函数里变量的数量,且新产生的观测值的所有值不为NA。
complete(X, netsting(X1), fill = list(X1 = "A", X2 = 5)) pin2<-data.frame(GeneId = rep("gene5", times=3), SampleName = paste("Sample",1:3, sep=""), Expression = c(14,19,18)) (expand(pin2, GeneId, SampleName, Expression))