Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:矩阵中的重复消除,跟踪多重性_R_Matrix - Fatal编程技术网

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的值来

我对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的值来获得。
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  

我不知道这个功能:我非常感谢你。它在我的矩阵上工作得很好!