我有一个包含整数的矩阵和一个包含多列的数据框.
矩阵:
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 4 6 1 NA NA
[2,] 2 3 NA NA NA NA
[3,] 3 4 5 6 2 1
[4,] 6 6 2 3 3 NA
[5,] 1 2 1 4 5 6
[6,] 4 NA NA NA NA NA
Run Code Online (Sandbox Code Playgroud)
数据框:
V1 V2 V3
1 "5P" "Fox" "28639"
2 "5P" "Horse" "33844"
3 "5P" "Cat" "Bes86"
4 "5P" "Seal" "Bes259"
5 "5P" "Snake" "Bes260"
6 "5P" "Platypus" "NSA8631"
Run Code Online (Sandbox Code Playgroud)
实际数据帧远大于此(10000+行).
我想要的是用我的数据框中相应的V2行替换矩阵中的数字.因此,所有"1"条目最终为"Fox","2"最终为"Horse",依此类推.
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] Fox Seal Platypus Fox NA NA
[2,] Horse Cat NA NA NA NA
[3,] Cat Seal Snake Platypus Horse Fox
[4,] Platypus Platypus Horse Cat Cat NA
[5,] Fox Horse Fox Seal Snake Platypus
[6,] Seal NA NA NA NA NA
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
Lyz*_*deR 10
这似乎可以解决问题:
#you convert the matrix to vector
#use it to index df2$V2
#and then reconstruct the matrix
matrix(df2$V2[as.vector(mat)], ncol=6)
#Or actually even better as @PierreLafortune messaged me
#you don't even need as.vector as this occurs automatically
matrix(df2$V2[mat], ncol=ncol(mat)) #result is the same
Run Code Online (Sandbox Code Playgroud)
数据:
mat <- as.matrix(read.table(header=T,text=' [,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 4 6 1 NA NA
[2,] 2 3 NA NA NA NA
[3,] 3 4 5 6 2 1
[4,] 6 6 2 3 3 NA
[5,] 1 2 1 4 5 6
[6,] 4 NA NA NA NA NA'))
df2 <- read.table(text='V1 V2 V3
1 "5P" "Fox" "28639"
2 "5P" "Horse" "33844"
3 "5P" "Cat" "Bes86"
4 "5P" "Seal" "Bes259"
5 "5P" "Snake" "Bes260"
6 "5P" "Platypus" "NSA8631" ')
Run Code Online (Sandbox Code Playgroud)
输出:
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] "Fox" "Seal" "Platypus" "Fox" NA NA
[2,] "Horse" "Cat" NA NA NA NA
[3,] "Cat" "Seal" "Snake" "Platypus" "Horse" "Fox"
[4,] "Platypus" "Platypus" "Horse" "Cat" "Cat" NA
[5,] "Fox" "Horse" "Fox" "Seal" "Snake" "Platypus"
[6,] "Seal" NA NA NA NA NA
Run Code Online (Sandbox Code Playgroud)