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

R 如何在不相等行的数据帧列表中生成NA,r,list,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 }) lappy(l,函数(x){nrow(x)您可以使用[.data.frame来完成此操作,因为如果您提取的行数超过da

我有一个数据帧列表,它的行数不相等。我希望在我的所有数据帧中生成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  })

lappy(l,函数(x){nrow(x)您可以使用
[.data.frame
来完成此操作,因为如果您提取的行数超过
data.frame
(或其他向量)中现有的行数,则默认情况下,它们将填充为
NA

lapply(l, function(x) x[seq_len(m),])
或者,如果以后要重置row.names:

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

lappy(l,函数(x){x您可以使用
[.data.frame
来实现这一点,因为如果您提取的行数超过
data.frame
中现有的行数(或其他向量),那么默认情况下,它们将被
NA
填充

lapply(l, function(x) x[seq_len(m),])
或者,如果以后要重置row.names:

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

lappy(l,函数(x){x只要您没有真正庞大的列表,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)
}

l只要您没有真正庞大的列表,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)
}

l
lappy(l,函数(x)as.data.frame(rbind(as.matrix(x),matrix(data=NA,nrow=(m-nrow(x)),ncol=ncol(x)))
lappy(l,函数(x)as.data.frame(rbind(as.matrix(x),matrix(data=NA,nrow=(m-nrow(x)),ncol=ncol(x)))
希望坚持应用函数,因为它们在代码可读性方面更好。谢谢。@Docendiscimus在本例中是NAs矩阵(
行到行添加
)调用
rbind
时将强制进入
data.frame
,因此不会影响data.frame的元素。希望继续应用函数,因为它们在代码可读性方面更好。谢谢。@docendDiscimus在本例中为NAs矩阵(
行到行添加
)调用
rbind
时,将被强制转换为
data.frame
,因此它不应影响data.frame的元素。