cbind と lapply を使用して動的にデータ フレームに列を追加しようとしています
問題を説明するために、私はラップリーなしでそれを行います
> c1 <- c(1,2)
> c2 <- c(3,4)
>
> source = data.frame(c1, c2)
>
> source
c1 c2
1 1 3
2 2 4
>
> names = c("c1", "c2")
> merged2 <- data.frame(matrix(nrow = 2))
> merged2 <- cbind(merged2, source[[ names[1] ]])
> merged2 <- cbind(merged2, source[[ names[2] ]])
>
> merged2
matrix.nrow...2. source[[names[1]]] source[[names[2]]]
1 NA 1 3
2 NA 2 4
この部分はほぼ問題なく動作します。ここで必要なのは最初の列を削除することだけですが、私が気付いていない、まったく作成しないより良い方法があると思います。
ただし、lapply を使用したバージョンでは、予期しない結果が生成されます。
> merged2 <- data.frame(matrix(nrow = 2))
> lapply(names, function(x) merged2 = cbind(merged2, source[[x]]) )
[[1]]
matrix.nrow...2. source[[x]]
1 NA 1
2 NA 2
[[2]]
matrix.nrow...2. source[[x]]
1 NA 3
2 NA 4
> merged2
matrix.nrow...2.
1 NA
2 NA
>
別の方法で試してみましたが、「手動で」cbind'ingしたときに得られるものではありません
> merged2 <- data.frame(matrix(nrow = 2))
> merged2 <- lapply(names, function(x) merged2 = cbind(merged2, source[[x]]) )
> merged2
[[1]]
matrix.nrow...2. source[[x]]
1 NA 1
2 NA 2
[[2]]
matrix.nrow...2. source[[x]]
1 NA 3
2 NA 4
おそらく私はラップリーを誤用しています、アドバイスをお願いします
前もって感謝します、 -- オレグ