如何在具有不相等行的数据帧列表中生成NA

时间:2016-07-08 10:30:09

标签: r list

我有一个数据框列表,其中包含不相等的行数。我想在我的所有数据帧中生成NA,以便它们中的行数相等。

l=list(data.frame(a=1:5,b=4:8), data.frame(a=1:10,b=11:20))
m=max(sapply(l, nrow))

这适用于长度但不适用于行。

lapply(l, function(x) { nrow(x) <- m  })

2 个答案:

答案 0 :(得分:5)

您可以使用[.data.frame执行此操作,因为如果您提取的行数多于data.frame(或其他向量)中存在的行数,则会使用NA填充lapply(l, function(x) x[seq_len(m),]) 默认值。

lapply(l, function(x){ x <- x[seq_len(m),]; row.names(x) <- NULL; x})

或者如果你想在之后重置row.names:

x <- 1:5
x[1:10]
# [1]  1  2  3  4  5 NA NA NA NA NA

如上所述,简单的向量也是如此:

$("#myModal").click(function(ev){
    if(ev.target != this) return;
    $('#myModal').modal('hide');
  });

答案 1 :(得分:1)

只要你没有真正庞大的列表,for循环在这里也可以正常工作并且很容易理解:

l <- list(data.frame(a=1:5,b=4:8), data.frame(a=1:10,b=11:20))
m <- max(sapply(l, nrow))

for (i in seq_along(l)) {
    entry <- l[[1]]

    # skip entry if no rows need to be added
    if (nrow(entry) == m) {
        next
    }

    # otherwise add NA rows
    rows_to_add <- matrix(rep(NA, (m - nrow(entry)) * ncol(entry)), 
                          ncol=ncol(entry))
    colnames(rows_to_add) <- colnames(entry)

    l[[i]] <- rbind(entry, rows_to_add)
}