我有一个原始的data.frame
,我想在某些列上运行lapply
,然后用cbind
操作的结果对剩余的列进行lapply
。
请参见下面的代码。理想情况下,我希望b
包含id
的第一个data.frame
列以及lapply
的结果。我以为我的错误是我的list
的cbind
参数包含列表的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/