利用R进行数据处理

一、数据读取

在利用R处理数据时,发现数据会有一些缺失,这时R就会报错

image.png
正如报错所示,第一行相比于其余行缺一个数据,这时我们可以利用skip=1这个函数跳过第一行,但大多数据并不是仅仅只有第一行缺数据,这时我们可以利用fill=T来填补空余的数据。
Go <- read.table("~/bulk_RNA/merge_bulk_RNA/GO/new.Annot.txt",head=T,sep="\t",fill = T)
这个时候就可以正常读入了,一些无数据的空就以空格填补了。

二、数据处理

1、数据拆分

有时我们的数据是这样的
image.png
但我们想处理成这种的
image.png

就是将每一个symbol号与一个GO_ID号相对应,这样方便后期做富集分析,我们对数据做以下处理:
a.将GO.Compoment按照;分割

# 初始化一个新的数据框
new_GO_term_BP <- data.frame(
  Column1 = character(0),
  Column2 = character(0),
  Column3 = character(0)
 )
# 遍历原始数据框的每一行
for (i in 1:nrow(GO_term_BP)) {
  # 使用strsplit将第三列的数据按分号分割成向量
  split_values <- unlist(strsplit(GO_term_BP$GO.Process[i], ";"))
  # 创建一个与分割后的数据长度相等的数据框
  temp_df_BP <- data.frame(
    Column1 = rep(GO_term_BP$GeneID[i], length(split_values)),
    Column2 = rep(GO_term_BP$Symbol[i], length(split_values)),
    Column3 = split_values
  )
  # 将temp_df添加到新的数据框中
  new_GO_term_BP <- rbind(new_GO_term_BP, GO_term_BP)
}

得到如下结果
image.png

但运行时间比较长,还是后台服务器提交方便。

分割后得到如下结果
image.png
可以看到我们此时再需将GO term按照//分割为两列即可。
split_data <- strsplit(new_GO_term_BP$Column3, "//", fixed = TRUE)

# 创建一个新的数据框
new_df <- data.frame(
  Column1 = new_GO_term_BP$Column1,
  Column2 = new_GO_term_BP$Column2,
  NewColumn1 = sapply(split_data, function(x) x[1]),
  NewColumn2 = sapply(split_data, function(x) x[2])
)

此时数据就成了我们想要的
image.png

以上数据再进行一些简单的分列即可。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容