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

请参见下面的代码。理想情况下,我希望b包含id的第一个data.frame列以及lapply的结果。我以为我的错误是我的listcbind参数包含列表的list ... list的第一个参数是一个可以处理的 vector ,但是第二个参数是实际的list本身。只是想知道如何处理。

谢谢!

df <- data.frame(id = 1:10,
                 colB = 11:20,
                 colC = 21:30)

a <- lapply(df[,2:3],
            function(x) {x = 10 * x}
)

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

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

最佳答案

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

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]返回 vector 。 cbind有一个用于data.frame的方法,在上述情况下会调用该方法,但在您的情况下不会如此。

关于r - 使用cbind将向量与向量列表绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54727722/

10-10 00:30