數據處理|數據查重怎麼辦?去重,就這麼辦!

  • 2019 年 11 月 5 日
  • 筆記

 

本文首發於“生信補給站”公眾號,https://mp.weixin.qq.com/s/oxOSaVxQNPDxFDq5Wu9WjQ

更多關於R語言,ggplot2繪圖,生信分析的內容,敬請關注小號。

 

論文查重怎麼辦? 就那麼辦!OK!

數據查重怎麼辦? 就這麼辦! KO!

數據清洗過程中的典型問題:缺失值、異常值和重複值處理,本次簡單介紹一些R處理重複值的用法:

  • 將符合目標的重複行全部刪掉;

  • 存在重複的行,根據需求保留一行

 

一 數據準備

使用GEO資料庫的表達數據,抽取一些並稍加處理(為方便展示)

data <- read.csv("A.csv",header=TRUE)

可以明顯看到ID_REF存在重複,那要怎麼處理呢?

 

二 一個不留

對於重複的行,一個不留!

1 unique 直接去重

data1 <- unique(data)
data1

img

簡單,直接,可以看到第9行完全重複的已經被刪除。

如果我還想去掉ID_REF重複的行,怎麼辦?

 

2 duplicated 可選去重

1)刪除數據集中完全重複的行,同unique

data2 <- data[!duplicated(data),]

2)選擇性刪除

A:刪除某一列存在重複的行

data2 <- data[!duplicated(data$ID_REF),]  

刪除了ID_REF列存在重複的行,搞定!

B:刪除某幾列重複的行

#等價
data2 <- data[!duplicated(data[,c("ID_REF","GSM74876")]),]
data2 <- data[!duplicated(data[,c(1,3)]),]

刪除了ID_REF列和GSM74876列均重複的行,Done!

 

三 擇”優“錄取

存在重複,但是不想完全刪除,根據數據處理的目的保留一行。

1 aggregate函數

A : ID_REF重複行,保留其均值

data3 <- aggregate( . ~ ID_REF,data=data, mean)

B: ID_REF重複行,保留其最大值

data3 <- aggregate( . ~ ID_REF,data=data, max)

 

2 dplyr函數

A : ID_REF重複行,保留其均值,同aggregate函數結果一致。

library(dplyr)
data4 <- data %>% group_by(ID_REF) %>% summarise_all(mean)

四 晶片表達數據去重

晶片表達數據中,會存在一個基因多個探針的情況,此處選擇在所有樣本中表達量之和最大的探針。

library(tibble)
data5 <- data %>%
#計算每個探針(行)的表達量均值
mutate(rowMean =rowMeans(.[grep("GSM", names(.))])) %>%
#表達量均值從大到小排序
arrange(desc(rowMean)) %>%
# 選擇第一個,即為表達量最大值
distinct(ID_REF,.keep_all = T) %>%
#去除rowMean這一列
select(-rowMean) %>%
# 將ID_REF列變成行名
column_to_rownames(var = "ID_REF")

img

 

好了,常用的數據去重方法先介紹這些,絕對比論文查重簡單多了!

 

◆ ◆ ◆ ◆ ◆

數據分析相關:

R|批量循環處理同一格式文件-csv,txt,excel

R In Action |基本數據管理

數據分析|R-缺失值處理

數據分析|R-異常值處理

數據分析|R-描述性統計

小數據| 描述性統計(Python/R 實現)

數據挖掘|R-相關性分析及檢驗

數據處理 | R-tidyr包

數據處理|R-dplyr

R|apply,tapply

數據處理|數據框重鑄

R|ML_code-入門(1)

R|ML_code-線性回歸(2)

R|機器學習入門-多元線性回歸(3)

 

【覺得不錯,右下角點個“在看”,期待您的轉發,謝謝!】