使用cbind将向量与向量列表绑定

时间:2019-02-16 21:16:19

标签: r list cbind do.call

我有一个原始的data.frame,我想在某些列上运行lapply,然后在cbind的其余列上运行lapply操作的结果。

请参见下面的代码。理想情况下,我希望b包含id的第一data.frame列和lapply的结果。我假设我的错误是我对list的{​​{1}}参数包含列表的cbind ... list的第一个参数是向量,可以处理,但是第二个参数是实际的list本身。只是想知道如何处理。

谢谢!

list

reprex package(v0.2.0)于2019-02-16创建。

3 个答案:

答案 0 :(得分:3)

差异是微小的,但很重要:为了使代码按您希望的方式工作

b <- do.call(cbind, list(df[1], a))
#                        ^^^^^

结果

b
#   id colB colC
#1   1  110  210
#2   2  120  220
#3   3  130  230
#4   4  140  240
#5   5  150  250
#6   6  160  260
#7   7  170  270
#8   8  180  280
#9   9  190  290
#10 10  200  300

区别在于df[1]返回一个data.frame,而df[,1]返回一个向量。 cbind有一个用于data.frame的方法,在上述情况下会调用该方法,但在您的情况下不会这样。

答案 1 :(得分:1)

您只能cbind两个data.frame

因此,将b重写为:

b <- cbind(df[1], as.data.frame(a))

> b
   id colB colC
1   1  110  210
2   2  120  220
3   3  130  230
4   4  140  240
5   5  150  250
6   6  160  260
7   7  170  270
8   8  180  280
9   9  190  290
10 10  200  300

请注意,df[1]用于保留data.frame的状态。

答案 2 :(得分:0)

您还可以使用bind_cols()软件包中的dplyr,它也可以使用列表。

library(dplyr)
bind_cols(df[1], a)

bind_cols()期望所有参数都是数据帧,命名列表或命名参数。在这种情况下,这也是您需要写df[1]而不是df[, 1]的方式。但是,如果您明确命名该参数,那么df[, 1]也会起作用:

bind_cols(id = df[, 1], a)