2016-07-21 5 views
1

私は異なる次元のベクトルのリストと、それぞれ異なるdata.frameオブジェクトのリストを持っています。 vec.listをdf.listに新しい属性としてparallelで追加したいと思います。これを最速の方法でどうすればいいですか?事前のおかげでdata.frameオブジェクトのリストにベクトルのリストを並列で新しいスロットとして追加する方法は?

おもちゃデータ

df.list <- list(
    d1 <- data.frame(
    V1=seq(1, by=2, len=6), V2=seq(6, by=2, len=6), 
    V3=letters[seq(1:6)], V4=sample(1:10, 6, replace = FALSE)), 
    d2 <- data.frame(
    V1=seq(2, by=3, len=8), V2=seq(6, by=3, len=8), 
    V3=letters[seq(1:8)], V4=sample(1:10, 8, replace = FALSE)), 
    d3 <- data.frame(
    V1=seq(4, by=3, len=5), V2=seq(9, by=3, len=5), 
    V3=letters[seq(1:5)], V4=sample(1:8, 5, replace = FALSE)) 
) 

私は並行してそれらを追加したいベクトル:

vec.list <- list(sc1 <- c(1,3,5,6,7,8), 
       sc2 <- c(2,4,5,7,9,10,14,16), 
       sc3 <- c(6,10,11,13,15)) 

答えて

4

これを試してみてください:

library(dplyr) 
library(purrr) 

df.list.new <- map2(.x = df.list , 
        .y = vec.list , 
        .f = function(x, y) bind_cols(x, data.frame('sc' = y))) 
+0

ありがとうございました。あなたのソリューションは非常に効率的です。 – Jeff

+0

私の喜び。実際のクレジットはpurrrパッケージに送られます - ありがとう@ハドレー。 –

3

基本機能を使用して、

df.list.new = Map(cbind, df.list, sc = vec.list) 

残念ながら、これはあなたのリスト名を保持しません。しかし、それらは再割り当てすることができます

names(df.list.new) = names(df.list) 
+0

それは問題ありませんが、結果は私にとっては非常に満足です。ご協力いただきありがとうございます。あなたが気にしないなら、私はアレックスの答えを受け入れました。乾杯 – Jeff

+1

まったくありません!私はアレックスの答えも好む。オプションを持つことは良いことです。追加のパッケージを使用することは望ましくありません。 – Gregor

関連する問題