这次用的包是要是tidyverse包,安装不上tidyverse包,可以安装tidyr包。
熊老师其实还是建议家直接装 tidyverse 包,这是个各种包的合集,里面还包括了 ggplot2 等。不过有可能安不上 tidyverse , 如果安装有问题,欢迎大家在下面提出问题。
版权归生信技能树的老师哈,用的代码和测试数据集均来自与生信技能树的生信全书:生物统计从理论到实践,具体链接在https://www.yuque.com/biotrainee/biostat
gather 函数的使用非常方便,可以把宽的数据转换成长数据
你只需要指定你转换后的 key 那列的列名,value 那列的列名,以及你需要转成长数据的那几列。我们以 test2 为例。
library(tidyverse)
# 使用gahter转换数据集
df <- read.table("test2.txt",header = T,stringsAsFactors = F)
str(df)
head(df)

df_long <- gather(df, #原始数据集
key = "Treatment_dose",#新数据集第一列名(分组信息)
value = "survive_time",#新数据集第二列名(数据信息)
control, low, middle, high)#需要提取的数据集的列名
str(df_long)
head(df_long)

其实我们常见的位列名为样本名,行名为基因名的数据集,下部构建此数据集
ndf <- df#取原数据集新建一个数据集
rownames(ndf) <- paste0("gene",1:15)#定义新数据集的行名(循环补齐)
colnames(ndf) <- paste0("patient",1:4)#定义新数据集的列名
str(ndf)
ndf[1:4,]

ndf_long <- gather(ndf, #原始数据集
key = "patient group",#新数据集第一列名(分组信息)
value = "gene expression",#新数据集第二列名(数据信息)
colnames(ndf))#需要提取的数据集的列名
str(ndf_long)
head(ndf_long)

可以看到,转换后的长数据集缺失了基因编号信息,下步在新数据集中重新构建一列内容gene.name加上基因信息
ndf_long$gene.name<- rep(rownames(ndf),ncol(ndf))
ndf_long[1:6,]

newdata<- ndf_long[,c(1,3,2)]#重新排序
newdata[1:6,]

网友评论