【发布时间】:2021-01-11 21:33:30
【问题描述】:
我有两个简单的数据框(dfOne 和 dfTwo),我想将第二个数据框 (selectedColumnsTwo) 的列选择添加到第一个数据框 (selectedColumnsOne) 的选择列中:
dfOne <- data.frame(list("a1"=c(1,2,3), "b1"=c(4,5,6), "c1"=c(7,8,9)))
dfTwo <- data.frame(list("a2"=c(1,2,3), "b2"=c(4,5,6)))
selectedColumnsOne = c("a1", "b1")
selectedColumnsTwo = c("a2", "b2")
数据框的样子:
> dfOne
a1 b1 c1
1 1 4 7
2 2 5 8
3 3 6 9
> dfTwo
a2 b2
1 1 4
2 2 5
3 3 6
我知道这可以通过一些基础 R 轻松完成:
dfOne[selectedColumnsOne] = dfOne[,selectedColumnsOne]+dfTwo[,selectedColumnsTwo ]
给出想要的结果:
> dfOne
a1 b1 c1
1 2 8 7
2 4 10 8
3 6 12 9
但是,我使用 dplyr 进行所有数据帧修改,如果我使用 dplyr 而不是 base R 进行此操作,将有助于提高可读性。 那么,还有没有办法用 dplyr 做到这一点?
编辑
这只是一个例子。我原来的两个数据框要大得多,我想要一个不绑定两个数据框的解决方案。另外,我正在寻找一个使用变量 selectedColumnsOne 和 selectedColumnsTwo 的解决方案,并且不需要引用其他列(示例中的列“c1”)
另外,我使用的是 dplyr 0.7.2,如果解决方案在这个版本中有效,那就更好了
我在看类似 mutate_at 的东西,但这不起作用:
> dfOne <- dfOne %>% mutate_at(selectedColumnsOne, .funs=funs(.+dfTwo[,selectedColumnsTwo ]))
Error in mutate_impl(.data, dots) :
Column `a1` must be length 3 (the number of rows) or one, not 2
【问题讨论】: