我正在尝试使用 cbind 和 lapply 将列添加到数据框中
为了说明一个问题,我会在没有 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
>
我尝试了不同的方式,但这不是我在“手动”绑定时得到的
> 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
可能我误用了 lapply,请指教
在此先感谢,--Oleg