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