我有这个矩阵的单元格数组:
df <- data.frame(col1=rep(letters[1:4], each=3),
col2=rep(letters[1:2], each=6),
col3=rep(letters[1:3], each=4))
ddf[, sapply(df, function(x) min(nlevels(x)) > 2)]
不幸的是,我不想要那样。我需要的是获得矩阵中的所有向量并获得一个大的向量单元数组。
我怎样才能做到这一点?
我需要一个大小为16 + 17 + 27 + 62 + 16的数组,其中每个向量都有14个元素。
之前我还没有使用过matlab,我相信这有点微不足道。 有人可以帮忙吗?
答案 0 :(得分:0)
您可以在每个单元格数组上调用num2cell
,然后使用cat
将它们连接起来。
%// Generate some test data
a = arrayfun(@(x)rand(14, x), [16 17 27 62 16] , 'uni', 0);
[14x16 double] [14x17 double] [14x27 double] [14x62 double] [14x16 double]
%// Now merge them into a cell array of vectors
newcell = cellfun(@(x)num2cell(x, 1), a, 'uni', 0);
newcell = cat(2, newcell{:});
只是为了验证一切都是我们期望的维度
isequal(size(newcell), [1 16+17+27+62+16])
1
isequal(size(newcell{1}), [14 1])
1
如果只是想要一个大矩阵,你可以将初始数据连接成一个矩阵(沿着第二个维度):
matrix = cat(2, a{:});
size(matrix)
14 138
我建议采用矩阵方法而不是单元阵列方法,因为MATLAB经过高度优化,可以对矩阵执行操作。你肯定会使用单元格阵列来打击性能。