2014-07-10 21 views
0

讀我有一個表,看起來像這樣:要附加後綴爲名稱列在一個表中,以便它可以作爲R

Gene U2803 U2823 U2840 U2841 U2862 U2872 U2897 U2982 U2991 U2994 U2998 U2999 U3001 U3007 U3012 U2980 
A1BG-AS 7.3159 9.3802 10.77 8.701 13.6066 8.3253 9.0556 9.8801 9.0776 11.2029 7.61 10.8403 9.2378 12.1697 9.7482 5.5327 
A1BG 7.4715 5.2955 10.2275 6.3606 10.1463 5.9968 6.2673 8.6119 6.153 6.7903 4.0843 13.0875 6.8167 8.3186 6.7643 5.14 
A1CF 0 0 0 0 0.0026 0 0 0 0 0 0 0 0 0 0.0037 0 
A2LD1 1.776 1.125 1.3508 1.2489 2.1252 2.1057 1.0177 1.6063 1.0053 0.9571 1.4972 1.3998 1.0935 2.4737 1.2063 1.7788 
A2ML1 0.1024 0.092 0.0473 0.071 0.1227 0.2047 0.2481 0.1089 0.0499 0.1381 0.057 0.0953 0.0433 0.0651 0.0598 0.0434 
A2M 5.4296 0.1688 2.4767 0.2507 0.5087 4.2835 2.2989 8.6027 3.1126 0.4565 0.167 2.9066 3.195 0.942 5.8904 6.7635 
A4GALT 0.2918 11.5673 4.9554 0 1.6693 1.6301 0.4985 2.4444 0.6217 1.4638 3.2648 0.5773 3.1071 7.651 0.4068 5.133 
A4GANLT 0 0 0 0 0.0575 0.1018 0 0.0422 0 0 0 0.0257 0.0276 0 0 0.0288 
AAA1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
AAA1 18.789 24.8681 29.8037 33.3986 37.8269 24.4719 21.1101 26.9985 21.9897 25 

如果您發現COLUMN1兩個基因具有相同的名稱,AAA1和A4GALT 。如何在這些基因中添加後綴,以便在R中讀取此表時不會將其識別爲重複的名稱。

R或awk中的一個小例子將非常有幫助。

謝謝。

+0

[R應該能夠處理在讀這沒有問題。如果您想要更改「Gene」列中的值即使重複也具有唯一值,您可以嘗試使用'make.unique'函數。 – A5C1D2H2I1M1N2O1R2T1

+0

你想要什麼後綴? –

+0

後綴像_(下劃線)後跟一個數字會做 – Angelo

回答

1

這個awk爲每個基因的出現都增加了一個新的數字。

awk 'a[$1]{$1=$1"_"a[$1]}{a[$1]++}1' file 

希望它能幫助:)

,以前的例子被竊聽。

描述

awk 'a[$1]{a[$1]++}NF&&a[$1]{$1=$1"_"a[$1]}!a[$1]{a[$1]++}1' file 

的原因,第一個未增加是這實際工作由於重命名$ 1的不可預見的副作用,$ 1已經被改變,當它到達增量,因此新值被遞增,而不是原來的。

反正現在的工作:)

私人祕書,如果有人知道如何減少這讓我知道:)

+0

謝謝你,jidder。 – Angelo

+0

你是什麼意思?什麼標籤分離? –

1

這是很容易做到,因爲在R.

一個讀取後,在步驟

想象一下,我們在下面有一個像「x」的文件。

x <- tempfile() 
cat("A 1 2\nB 3 4\nC 5 6 13\nA 7 8\nB 9 10\nA 11 12\n", file=x) 

你試圖讀取它這個樣子,但是遇到了由於重複row.names的問題:

read.table(file = x, row.names = 1, header = FALSE, 
      fill = TRUE, stringsAsFactors = FALSE) # Error 
# Error in read.table(file = x, row.names = 1, header = FALSE) : 
# duplicate 'row.names' are not allowed 

row.names爲列第一讀它,然後從那裏工作。

temp <- read.table(file=x, header = FALSE, fill = TRUE, 
        stringsAsFactors = FALSE) 
temp 
# V1 V2 V3 V4 
# 1 A 1 2 NA 
# 2 B 3 4 NA 
# 3 C 5 6 13 
# 4 A 7 8 NA 
# 5 B 9 10 NA 
# 6 A 11 12 NA 

僅供參考,一個matrix可以有重複rownames(但我真的不建議這):

temp1 <- as.matrix(temp[-1]) 
rownames(temp1) <- temp[, 1] 
temp1 
# V2 V3 V4 
# A 1 2 NA 
# B 3 4 NA 
# C 5 6 13 
# A 7 8 NA 
# B 9 10 NA 
# A 11 12 NA 

相反,看看可以用來創建獨特的功能之一名稱,如make.namesmake.unique。後者似乎更適合這種情況。

make.names(temp$V1, unique=TRUE) 
# [1] "A" "B" "C" "A.1" "B.1" "A.2" 
make.unique(temp$V1, sep="_") 
# [1] "A" "B" "C" "A_1" "B_1" "A_2" 

如下您可以結合它:

rownames(temp) <- make.unique(temp$V1, sep="_") 
temp$V1 <- NULL 
temp 
#  V2 V3 V4 
# A 1 2 NA 
# B 3 4 NA 
# C 5 6 13 
# A_1 7 8 NA 
# B_1 9 10 NA 
# A_2 11 12 NA 
相關問題