0

これは、リストからの値に基づいてデータフレームに列を追加する私の古い投稿と同様の質問です。

今、私はそれを提供するソリューションを使用したいと思いますが、それを単一の data.frame に適用する代わりに、data.frame のリストで使用したいと思います。

簡単に言うと、次のような data.frames のリストがあります。

df <- list(data.frame(A=c("a","b","c"), 
                      B=c("1","2","1"), 
                      C=c(0.1,0.7,0.4)), 
            data.frame(A=c("d","e","f"), 
                       B=c("2","2","3"), 
                      C=c(0.5,0.1,0.5)), 
            data.frame(A=c("g","h","i"), 
                       B=c("3","1","2"), 
                       C=c(0.2,0.1,0.5)))

また、名前が に一致する要素のリストdf$B、つまり、これらの値は からの値の順列ですdf$B。例を次に示します。

 ll <- list('1'=c(0.1,0.1,0.4,0.2,0.1,0.4),
            '2'=c(0.1,0.1,0.5,0.7,0.5,0.7),
            '3'=c(0.1,0.1,0.2,0.2,0.2,0.5))

data.frames の新しいリストを作成したいのですが、リスト内の値に対応するリストの各データフレームに新しい列がありますがdf同時にそれらは? これは、より良い説明のための望ましい出力ですdf$Bllll

> list.df
[[1]]
  A B   C  P1  P2  P3  P4  P5  P6
1 a 1 0.1 0.1 0.1 0.4 0.2 0.1 0.4
2 b 2 0.7 0.1 0.5 0.7 0.1 0.5 0.1
3 c 1 0.4 0.4 0.1 0.2 0.1 0.1 0.4

[[2]]
  A B   C  P1  P2  P3  P4  P5  P6
1 d 2 0.5 0.1 0.7 0.5 0.1 0.7 0.1
2 e 2 0.1 0.7 0.5 0.1 0.7 0.1 0.5
3 f 3 0.5 0.5 0.5 0.2 0.1 0.2 0.1

[[3]]
  A B   C  P1  P2  P3  P4  P5  P6
1 g 3 0.2 0.1 0.5 0.2 0.2 0.2 0.5
2 h 1 0.1 0.2 0.1 0.4 0.2 0.2 0.4
3 i 2 0.5 0.1 0.5 0.1 0.1 0.5 0.7

1 つの data.frame に対して私が持っている解決策は次のとおりです。

sampfun <- function(i, l) sample(l[[as.character(i)]], 10000, replace=TRUE)
list.df <- cbind(df, t(sapply(df$B, sampfun, l = ll)))

問題は、data.frames のリストで使用するためにこのソリューションを実装する方法がわからないことです。

助けてくれてありがとう

注: data.framesの実際のリストには 9,000 の要素があり、10,000 を超える列を追加する予定であるため、メモリとスピードアップが重要です。

4

0 に答える 0