在R中展开矩阵的列
我有一个矩阵“a”,如下所示:在R中展开矩阵的列,r,matrix,R,Matrix,我有一个矩阵“a”,如下所示: a<-rbind(c("a1","ost1;ost2;ost3","utr;body;pro"), c("a2","idh1;idh2","pro;body"), c("a3","dnm1","body")) >a [,1] [,2] [,3] [1,] "a1" "ost1;ost2;ost3" "utr;body;pro" [2,] "a2" "idh1;idh2"
a<-rbind(c("a1","ost1;ost2;ost3","utr;body;pro"),
c("a2","idh1;idh2","pro;body"),
c("a3","dnm1","body"))
>a
[,1] [,2] [,3]
[1,] "a1" "ost1;ost2;ost3" "utr;body;pro"
[2,] "a2" "idh1;idh2" "pro;body"
[3,] "a3" "dnm1" "body"
好的,明白了:
b<-do.call(rbind, (apply(a, 1, function(x) {do.call(cbind, strsplit(x,";"))})))
b您的解决方案,没有不必要的括号:
do.call(rbind, apply(a, 1, function(x) do.call(cbind, strsplit(x, ";"))))
这也适用于:
do.call(rbind, lapply(apply(a, 1, strsplit, ';'), do.call, what = cbind))
并不是说使用匿名函数有什么问题(function(x){…}
),但是有些人觉得它更“优雅”,没有任何问题。请随意发布您的解决方案作为答案并接受它。do.call
几乎就像魔术一样:-)。干得好。
do.call(rbind, lapply(apply(a, 1, strsplit, ';'), do.call, what = cbind))