我有一个数据框列表,其中包含不相等的行数。我想在我的所有数据帧中生成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 })
答案 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)
}