2017-06-23 17 views
1

データフレームのリストが2つあります。今、私は更新したいR:計算された列をデータフレームのリストに追加する

scores <- sapply(list1, function(df) sum(select(df, score))/nrow(df)) 
scores 
[1] 0.6 0.8 

:私はLIST1におけるデータフレームごとにスコアを計算

# first list 
df1 <- data.frame(id=1:5, score=c(rep(1, 3), rep(0, 2))) 
df2 <- data.frame(id=1:5, score=c(rep(1, 4), rep(0, 1))) 
df1 
    id score 
1 1  1 
2 2  1 
3 3  1 
4 4  0 
5 5  0 

df2 
id score 
1 1  1 
2 2  1 
3 3  1 
4 4  1 
5 5  0 

list1 <- list(df1, df2) 

# second list 
df3 <- data.frame(id =1 :3) 
df4 <- data.frame(id =1 :4)  
list2 <- list(df3, df4) 

最初のリストにいくつかの計算をしたいし、2番目のリストに結果を適用しますリスト2のデータフレームにスコアを付けて、以下を取得します。最初のスコアは最初のデータフレームに適用され、2番目は2番目に適用されます。私はLIST2にlapply使用して試した

df3 
    id score 
1 1 0.6 
2 2 0.6 
3 3 0.6 

df4 
    id score 
1 1 0.8 
2 2 0.8 
3 3 0.8 
4 4 0.8 

、私は、これは、リスト内のDFSを更新代わりに、1の適切なスコアで

明らか
list2 <- lapply(list2, function(df){ df$score <- 1; df}) 

の線に沿って何かを考えています a)データフレームdf3とdf4を更新することができません。 b)計算された得点をラップ関数に渡す方法がわかりません

ヘルプありがとうございました。 TIA。

答えて

1

我々はMap

Map(cbind, list2, score = scores) 
+0

グッド悲しみを使用することができ、それは簡単でした!しかし、x < - Map(cbind、list2、score = score)のようなもの以外のdf3とdf4をどのように更新すればよいですか? df3 < - x [[1]]; df4 < - x [[2]] – Garry

+0

@Garry元のオブジェクトを更新するのではなく、 'list'に保持する方が良いでしょう。それを更新したいのですか? 'list2 < - Map(cbind、list2、score = score);名前(list2)< - c( "df3"、 "df4"); list2env(list2、.GlobalEnv) ' – akrun

+1

ありがとうございました。綺麗な! – Garry

関連する問題