附加动态列的cbind和lapply

时间:2014-01-15 13:35:24

标签: r dataframe lapply cbind

我正在尝试使用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

0 个答案:

没有答案