根据另一个矩阵更改矩阵列中的名称

时间:2014-06-03 10:02:36

标签: r

我们来举个例子。我有两个矩阵:

带名字的矩阵:

> dput(a)
structure(c("Greg", "Martin", "Hunge", "Rek", "Pred", "Singa", 
"Kreton", "Wita", "Marcus", "Sebas", "Theo", "Rox", "Plate", 
"Tret"), .Dim = c(7L, 2L))

矩阵与数据:

> dput(b)
structure(c("Greg", "Hunge", "Pred", "12", "54", "11", "33", 
"44", "55", "61", "23", "68", "34", "123", "43", "22", "112", 
"35", "79", "22", "19"), .Dim = c(3L, 7L))

我想根据矩阵a更改数据矩阵(第一列)中的名称。所以,输出应该是这样的:

> dput(c)
structure(c("Wita", "Sebas", "Rox", "12", "54", "11", "33", 
"44", "55", "61", "23", "68", "34", "123", "43", "22", "112", 
"35", "79", "22", "19"), .Dim = c(3L, 7L))

最简单的方法是什么?请记住,a中的名字多于我需要的名称。功能需要找到每一行的正确名称。

2 个答案:

答案 0 :(得分:2)

您可以使用match()

a <- structure(c("Greg", "Martin", "Hunge", "Rek", "Pred", "Singa", 
            "Kreton", "Wita", "Marcus", "Sebas", "Theo", "Rox", "Plate", 
            "Tret"), .Dim = c(7L, 2L))

b <- structure(c("Greg", "Hunge", "Pred", "12", "54", "11", "33", 
            "44", "55", "61", "23", "68", "34", "123", "43", "22", "112", 
            "35", "79", "22", "19"), .Dim = c(3L, 7L))

# copy
c <- b
c[ ,1] <- a[match(b[ ,1], a[ ,1]), 2]
c
#     [,1]    [,2] [,3] [,4] [,5]  [,6]  [,7]
#[1,] "Wita"  "12" "33" "61" "34"  "22"  "79"
#[2,] "Sebas" "54" "44" "23" "123" "112" "22"
#[3,] "Rox"   "11" "55" "68" "43"  "35"  "19"

答案 1 :(得分:0)

我希望这对你有用......

d=merge(b,a,by.x=1,by.y=1)
c=as.matrix(d)
c=c[,-1]
c=c[,c(7,1:6)]
colnames(c)=NULL