これは、あるポリゴンの土地利用を計算する、私のfor-loop in Rの(意味のない)切り詰め版です。 plyr::rbind.fill()
を使用して計算をdata.frameにバインドする必要がある場合を除いて、データをうまく反復処理します。私は望みの結果を得るだけでなく、(同じ数の)不要な列をNA値で埋めます(私は列名と関係があると思います)。forループへのdata.frameへのリストバインド
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
}
これらのリストを1つのデータフレームにまとめて、なぜこれらの追加の列が作成されるのが最適な機能/方法ですか?
私はrbind()
,data.table::rbindlist()
のような他の機能を成功させることなく試しました。
'rbind.fill'(およびその後継の' bind_rows')は、同じnaあなたの「NA」には名前がありません。 '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)}}))' – alistaire
私は方法を考えていた複雑になる。説明をありがとう! – andrasz