因子矩阵转data.frame出现异常,求原因及规范转换方法
带维度属性的因子转data.frame出现NA行的问题解析
问题原因
你定义的对象a并非R原生支持的因子矩阵,而是一个附加了维度(dim)属性的因子向量——它的class被指定为factor,同时通过.Dim赋予了矩阵的维度结构。这种非常规对象在调用as.data.frame()时,R的处理逻辑出现冲突:
- 一方面,它试图按矩阵的列结构拆分数据;
- 另一方面,又会默认按因子向量的完整长度(18个元素)来构建数据框,最终导致将18个元素强行分配到3列中,每列填充18行,前6行是原矩阵的对应值,剩余12行因无匹配数据被填充为
NA,同时抛出数据损坏的警告。
规范转换方法
方法1:先转为标准矩阵再转data.frame
通过as.matrix()将带维度的因子转换为字符型矩阵,再用as.data.frame()转换,就能得到符合预期的6行3列数据框:
as.data.frame(as.matrix(a))
方法2:手动按列提取构建data.frame
直接按矩阵列索引提取每一列的因子向量,手动组合成数据框:
data.frame( a.1 = a[, 1], a.2 = a[, 2], a.3 = a[, 3] )
额外:转换为逻辑型列
如果需要将因子转换为逻辑型而非保留因子类型,可以先转成逻辑向量再构建矩阵:
as.data.frame(matrix(as.logical(a), nrow = 6, ncol = 3))
内容的提问来源于stack exchange,提问作者Giulio Centorame
相关产品推荐
相关产品推荐

