我有这个向量
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/