使用 cbind 将向量与向量列表绑定
Bind vector with list of vectors using cbind
我有一个原始 data.frame
,我想 运行 lapply
在某些列上,然后 cbind
其余列的结果来自 lapply
操作。
见下面的代码。理想情况下,我希望 b
包含 data.frame
的第一个 id
列和 lapply
的结果。我假设我的错误是我 cbind
的 list
参数包含一个 list
列表... list
的第一个参数是一个向量,可以处理,但第二个参数是实际的 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。
你只能 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
状态。
区别很细微但很重要:为了让您的代码按照您希望的方式工作,您需要
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]
returns一个data.frame
而df[,1]
returns一个向量。 cbind
有一个用于 data.frame
s 的方法,在上面的例子中调用了 get,但在你的例子中没有。
您还可以使用 dplyr
包中的 bind_cols()
,它也可以用于列表。
library(dplyr)
bind_cols(df[1], a)
bind_cols()
期望所有参数都是数据框、命名列表或命名参数。在这种情况下,这也是您需要编写 df[1]
而不是 df[, 1]
的方式。但是,如果您明确命名参数,df[, 1]
也将起作用:
bind_cols(id = df[, 1], a)
我有一个原始 data.frame
,我想 运行 lapply
在某些列上,然后 cbind
其余列的结果来自 lapply
操作。
见下面的代码。理想情况下,我希望 b
包含 data.frame
的第一个 id
列和 lapply
的结果。我假设我的错误是我 cbind
的 list
参数包含一个 list
列表... list
的第一个参数是一个向量,可以处理,但第二个参数是实际的 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。
你只能 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
状态。
区别很细微但很重要:为了让您的代码按照您希望的方式工作,您需要
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]
returns一个data.frame
而df[,1]
returns一个向量。 cbind
有一个用于 data.frame
s 的方法,在上面的例子中调用了 get,但在你的例子中没有。
您还可以使用 dplyr
包中的 bind_cols()
,它也可以用于列表。
library(dplyr)
bind_cols(df[1], a)
bind_cols()
期望所有参数都是数据框、命名列表或命名参数。在这种情况下,这也是您需要编写 df[1]
而不是 df[, 1]
的方式。但是,如果您明确命名参数,df[, 1]
也将起作用:
bind_cols(id = df[, 1], a)