将后缀附加到表中的名称列,以便在R中读取
我有一张这样的桌子:将后缀附加到表中的名称列,以便在R中读取,r,awk,R,Awk,我有一张这样的桌子: 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
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
如果您注意到第1列中的两个基因具有相同的名称,AAA1和A4GALT。我如何给这些基因添加后缀,以便在阅读R中的表格时不会被识别为重复的名称
R或awk中的一个小示例将非常有用
谢谢。这个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在达到增加值时已被更改,因此新值将增加,而不是原始值
不管怎样,它现在起作用了:)
注:如果有人知道如何减少这一点,请告诉我:)这很容易做到,因为在R中的步骤中阅读一篇文章 假设我们有一个像下面的“x”这样的文件 先将
行作为一列来阅读,然后从中开始工作
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
相反,请查看可用于创建唯一名称的函数之一,例如make.names
或make.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
rownames(temp)R应该能够毫无问题地处理在中读取此内容。如果您想更改“基因”列中的值,使其在复制时具有唯一值,您可以尝试使用make.unique
函数。您想要什么后缀?像u(下划线)这样的后缀后跟一个数字是什么意思?什么标签分离?
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.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