我正在尝试使用cbind和lapply以dinamycally方式向数据框添加列
说明一个问题,我会用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
可能我滥用了lapply,请建议
提前谢谢, --Oleg