-1

我正在创建一个用于预测目的的分类模型。我有几个 ext 文件,我将它们转换成一个包含多个列表(称为梳子)的大列表。然后,我将大列表分解为一个单独的数据框,每个列表都作为自己的列(称为 BI)。因为每个列表可能包含不同数量的元素,所以更简单的参数 matrix(unlist(l), ncol=ncol) 不起作用。在审查替代方案时,我进行了修改以编译以下内容:

max_length <- max(sapply(comb,length))

BI<-sapply(comb, function(x){
c(x, rep(0, max_length - length(x)))
})

这将创建一个数据框,为每个列表分配一列,并为该列中的每个缺失元素分配零值。这些零显示在该列的末尾,但我希望它们位于该列的开头。这是电流输出的示例:

cola colb colc
2    2    2   
1    1    0
4    0    0

我需要您的帮助来将我的原始代码转换为以下格式:

acola colb colc
2    0    0   
1    2    0
4    1    2
4

1 回答 1

0

交换串联中的顺序可能就足够了c

max_length <- max(sapply(comb, length))

BI <- sapply(comb, function(x){
    c(rep(0, max_length - length(x)), x)
})

编辑:根据下面评论中的其他信息,这是一种以另一种方式修改代码的方法。这个想法是,只要您的第一种方法为您提供适当的数据框,我们就可以通过使用order-function 来规避问题。

max_length <- max(sapply(comb,length))

BI <- sapply(comb, function(x){
    .zeros <- rep(0, max_length - length(x))
    .rearange <- order(c(1:length(x), .zeros))
    c(x, .zeros)[.rearange]
})

我已经测试过这段代码可以在我创建的一个小测试示例上运行,但我不确定这个示例是否类似于您的 comb...

如果这种修改后的方法不起作用,那么仍然可以先使用您的原始代码创建数据框,然后重新排序一列。

于 2016-04-09T20:38:47.747 回答