我正在寻找可用于解决问题的功能。 我有:
nazwy - 带有样本名称的矩阵(1行和n列)(作为参考矩阵)
标签 - data.frame。 例如:
Nazwy:
1 At5g
2 At5a
3 A63h
4 Aj89
5 Ae31
Tab:
1 At5g Ae31
2 Aj89 At5g
3 At5a 0
4 0 0
在'Tab'中我想用'Nazwy'中的相应行号替换名称。
Result:
1 1 5
2 4 1
3 2 0
4 0 0
我使用带有substring()函数的循环,但对于非常大的数据计算持续很长时间,所以我正在寻找另一种解决方案。 你有什么想法吗?
gosia
答案 0 :(得分:2)
您可以使用match
res <- Tab
res[] <- match(as.matrix(Tab), Nazwy[,1], nomatch=0)
res
# v1 v2
#1 1 5
#2 4 1
#3 2 0
#4 0 0
或者
library(data.table)
res <- copy(Tab)
for(j in seq_along(res)){
set(res, i=NULL, j=j, value=match(res[[j]], Nazwy[,1], nomatch=0))
}
res
# v1 v2
#1: 1 5
#2: 4 1
#3: 2 0
#4: 0 0
或者
library(dplyr)
mutate_each(Tab,funs(match(., Nazwy[,1], nomatch=0)))
# v1 v2
#1 1 5
#2 4 1
#3 2 0
#4 0 0
Nazwy <- structure(c("At5g", "At5a", "A63h", "Aj89", "Ae31"),
.Dim = c(5L,
1L), .Dimnames = list(c("1", "2", "3", "4", "5"), "v1"))
Tab <- structure(list(v1 = c("At5g", "Aj89", "At5a", "0"),
v2 = c("Ae31",
"At5g", "0", "0")), .Names = c("v1", "v2"), class = "data.frame",
row.names = c("1", "2", "3", "4"))