簡體   English   中英

使用cbind將向量與向量列表綁定

[英]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.framedf[,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM