【发布时间】:2016-07-15 18:13:58
【问题描述】:
这是我在 R 中的 for 循环的(无意义的)截断版本,用于计算某些多边形的土地使用。它可以很好地遍历数据,除非它应该使用 plyr::rbind.fill() 将计算绑定到 data.frame。我得到了想要的结果,但也得到了(相同数量的)额外的填充了 NA 值的不需要的列(我猜这与列名有关)。
agri_coverage <- data.frame(matrix(rnorm(3), nrow=1))
set.seed(23)
agri <- rnorm(10, 0.5)
land_use <- NULL
for (i in seq_along(agri)) {
name <- agri[i]
if (name > 1) {
wl <- as.list(unlist(agri_coverage[ ,1:3]))
} else {
wl <- as.list(rep(NA, 3))
}
land_use <- rbind.fill(land_use, data.frame(wl)) #combine output
}
将这些列表组合到一个数据框中的最佳函数/方法是什么?为什么会产生这些额外的列?
我尝试了rbind()、data.table::rbindlist()等其他功能,但没有成功。
【问题讨论】:
-
rbind.fill(它是 dplyr 的继任者bind_rows)为每个向量寻找相同的名称以对齐它们,而您的NAs 没有名称。如果您将else更改为wl <- as.list(setNames(rep(NA, 3), names(agri_coverage))),它将起作用。更典型的基本方法是do.call(rbind, lapply(agri, function(x){if(x > 1){agri_coverage} else {rep(NA, 3)}})) -
我想的方式很复杂。感谢您的解释!