R:矩阵中的重复消除,跟踪多重性
我对R有一个基本的问题。 我已经制作了矩阵R:矩阵中的重复消除,跟踪多重性,r,matrix,R,Matrix,我对R有一个基本的问题。 我已经制作了矩阵 M [,1] [,2] [1,] "a" "1" [2,] "b" "2" [3,] "a" "3" [4,] "c" "1" 我想获得3X2矩阵 [,1] [,2] [,3] [1,] "a" "1" "3" [2,] "b" "2" NA [3,] "c" "1" NA 通过消除M[,1]中的重复项并在N[i,2],N[i,3]中写入M[,2]中与M[,1]中的相同元素对应的所有i的值来
M
[,1] [,2]
[1,] "a" "1"
[2,] "b" "2"
[3,] "a" "3"
[4,] "c" "1"
我想获得3X2矩阵
[,1] [,2] [,3]
[1,] "a" "1" "3"
[2,] "b" "2" NA
[3,] "c" "1" NA
通过消除M[,1]
中的重复项并在N[i,2],N[i,3]
中写入M[,2]
中与M[,1]
中的相同元素对应的所有i的值来获得。N[,3]
中的“NA”
对应于M[,1]
中的单态
我知道如何消除R中向量的重复项:我的问题是跟踪M[,2]
中的元素,并将它们写入结果矩阵N
。我尝试了循环,但在我的“真实世界”案例中,它们不太有效,因为矩阵要大得多
有什么建议吗
非常感谢。将矩阵转换为data.frame后,您可以在重塑2包中使用dcast
。要反转此过程,可以使用melt
df = data.frame(c("a","b","a","c"),c(1:3,1))
colnames(df) = c("factor","obs")
require(reshape2)
df2=dcast(df, factor ~ obs)
现在,df2是:
factor 1 2 3
1 a 1 NA 3
2 b NA 2 NA
3 c 1 NA NA
对我来说,保持这种状态更有意义。但如果您需要您的格式:
res = t(apply(df2,1,function(x) { newLine = as.vector(x[which(!is.na(x))],mode="any"); newLine=c(newLine,rep(NA, ncol(df2)-length(newLine) )) }))
res = res[,-ncol(res)]
[,1] [,2] [,3]
[1,] "a" " 1" " 3"
[2,] "b" " 2" NA
[3,] "c" " 1" NA
我不知道这个功能:我非常感谢你。它在我的矩阵上工作得很好!