[英]Bind vector with list of vectors using cbind
我有一個原始data.frame
,我想運行lapply
對某些列然后cbind
從結果剩余的列lapply
操作。
請參見下面的代碼。 我非常喜歡b
包含第一id
從列data.frame
從結果lapply
。 我假設我的錯誤是我的list
參數cbind
包含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軟件包 (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]
返回向量。 cbind
有一個方法data.frame
S的就是獲得被稱為在上述情況下,但不是在你的情況。
您只能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
狀態。
你也可以使用bind_cols()
從dplyr
包,還可以列出工作。
library(dplyr)
bind_cols(df[1], a)
bind_cols()
期望所有參數都是數據幀,命名列表或命名參數。 在這種情況下df[, 1]
也需要這種方式來寫df[1]
而不是df[, 1]
。 但是,如果您明確命名該參數,則df[, 1]
也將起作用:
bind_cols(id = df[, 1], a)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.