列が同じで行の長さが異なる 5 つのデータフレームがあるとします。5つのデータフレームのそれぞれから特定の列を取得し、長さが一致しないNA(または何でも)で埋める1つのデータフレームを作成したいと思います。ここで、1回限りのベクトルでこれを行う方法を示す質問を見てきましたが、より大きなデータセットでそれを行う方法を探しています.
例: 同じ長さの 2 つのデータフレーム:
long <- data.frame(accepted = rnorm(350, 2000), cost = rnorm(350,5000))
long2 <- data.frame(accepted = rnorm(350, 2000), cost = rnorm(350,5000))
それらを組み合わせたリストを作成してから、空のデータフレームを作成し、リスト内のデータフレームから共通の変数を入力できます。
list1 <- list(long, long2)
df1 <- as.data.frame(matrix(0, ncol = 5, nrow = 350))
df1[,1:2] <- sapply(list, '[[', 'accepted')
そして、それは機能します。
しかし、長さが異なるデータフレームがさらにある場合、このアプローチは失敗します。
long <- data.frame(accepted = rnorm(350, 2000), cost = rnorm(350,5000))
long2 <- data.frame(accepted = rnorm(350, 2000), cost = rnorm(350,5000))
medlong <- data.frame(accepted = rnorm(300, 2000), cost = rnorm(300,5000))
medshort <- data.frame(accepted = rnorm(150, 2000), cost = rnorm(150,5000))
short <- data.frame(accepted = rnorm(50, 2000), cost = rnorm(50,5000))
リストと結合されたデータフレームを作成します。
list2 <- list(long, long2, medlong, medshort, short)
df2 <- as.data.frame(matrix(0, ncol = 5, nrow = 350))
df1[,1:5] <- sapply(list, '[[', 'accepted')
サイズの不一致に関するエラーが表示されます。
エラー
[<-.data.frame
(*tmp*
、 、1:5、値 = c(1998.77096640377、: 交換には 700 個のアイテムがあり、1750 が必要です)
このデータフレームに他のデータフレームとは異なる長さの列を設定するために私が見つけた唯一の解決策は、次のようなものです。
combined.df <- as.data.frame(matrix(0, ncol = 5, nrow = 350))
combined.df[,1] <- long[,2]
combined.df[,2] <- c(medlong[,2], rep(NA, nrow(long) - nrow(medlong))
しかし、それを行うためのよりエレガントで高速な方法が必要です...ここでは概念的に大きな何かが欠けていることを知っています