r - 如何通过R中的名称将向量转换为矩阵?

标签 r matrix

我有这个向量

   ID   var2     ID   var2   var1     ID   var2     ID   var3 
"1000"    "1" "1001"    "1"    "1" "1002"    "7" "1003"    "3" 

可以从
x=c("1000","1","1001","1","1","1002","7","1003","3")
names(x)=c("ID","var2","ID","var2","var1","ID","var2","ID","var3")

我会把它转换成这个尺寸为 4x4 的矩阵:
ID        var1     var2    var3
"1000"     NA       "1"     NA
"1001"     "1"      "1"     NA
"1002"     NA       "7"     NA
"1003"     NA       NA     "3"  

请问你能帮帮我吗?

最佳答案

我们可以 split向量 'x' 通过基于 'ID' 出现的分组向量,match具有列表元素名称的唯一名称 ('nm1') order然后 rbind得到预期的输出

 nm1 <- sort(unique(names(x)))
 do.call(rbind,lapply(split(x, cumsum(grepl('ID', names(x)))), function(y)
        setNames(y[match(nm1, names(y))], nm1)
        ))
 # ID     var1 var2 var3
 #1 "1000" NA   "1"  NA  
 #2 "1001" "1"  "1"  NA  
 #3 "1002" NA   "7"  NA  
 #4 "1003" NA   NA   "3" 

或使用 row/col创建空矩阵后的索引。
indx <- match(names(x), nm1)
m1 <- matrix(, nrow= max(tabulate(indx)), ncol=length(nm1), 
             dimnames=list(NULL, nm1))
m1[cbind(cumsum(indx==1), indx)] <- x

关于r - 如何通过R中的名称将向量转换为矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30682980/

相关文章:

r - 加快 Julia 写得不好的 R 示例的速度

r - 从自定义目录加载R软件包

c++ - 复制矩阵的一部分并粘贴到另一个C++上

c - 方阵置换

arrays - 如何使用 Swift 从矩阵中获取子矩阵

css - 仅在 Shiny 仪表板的特定 tabItem 上应用 css 格式

r - 从查找表创建新变量

regex - 删除一定长度的单词之间的空格

json - 表示JSON中的矩阵

matrix - Svg矩阵分解