2016-11-01 9 views
1

244個のデータフレームを含むリストがあります。このリストはdと呼ばれ、d[[1]]はこのようになります。forループを集計する際にエラーメッセージが表示される

d[[1]] 

    year pos days sal 
1 2009 A  31 2000 
2 2009 B  60 4000 
3 2009 C  10 600 
4 2010 B  10 1000 
5 2010 D  90 7000 

私はグループ年間でデータを、日とSAL、および日数は、グループ内の最大値である選択POS追加したいと思います。

結果は次のようである:

year pos days sal 
1 2009 B 101 6600 
2 2010 D 100 8000 

私はそれだけで1つのデータフレームにそれをやった場合に来るとき、これを行う方法を知っています。 私はそれをこのようでした:

library(dplyr) 
ygroup<-group_by(d[[1]]$year) 
summarise(ygroup, pos = pos[which.max(days)], days = sum(days), sal = sum(sal)) 

をしかし、私は、リストdの244枚のデータフレームに、この同じ操作をしたいです。 私はこれを試しました:

e<-list() 
ygroup<-list() 
for(i in 1:244){ 
ygroup[[i]]<-group_by(d[[i]]$year) 
e[[i]]<-summarise(ygroup[[i]], pos = pos[which.max(days)], days = sum(days), sal = sum(sal)) 
} 

しかし、これは動作しません、エラーが表示されます。

Error: expecting a single value 

(私はこの部分だと思う; pos = pos[which.max(days)]が問題を作っているが、私はそれはわからない...)私はこれをどのように解決することができ ...?

すべてのコメントをいただければ幸いです! :)

+0

をループへの匿名関数呼び出しでlapplyを使用することができますsal = sum(sal))) ''%s 'は、 ''%s' ''%s ' – akrun

答えて

4

我々は `lapply`すなわちで試してみてくださいlistdata.frameのS( 'D')

lapply(d, function(x) x %>% 
         group_by(year) %>% 
         summarise(pos = pos[which.max(days)], 
           days = sum(days), sal = sum(sal))) 
+1

ありがとう!私はそれを解決することができた:) – min

1

あなたのエラーは[[I]] <電子である - あなたが方が良いlapply使用してではなく、電子< -listためそれほど必要はありません(リストを返します

ygroup<-lapply(ygroup,FUN=group_by,d$year) 
e<-lapply(ygroup,FUN=summarise,pos = max(days), days = sum(days), sal = sum(sal)) 

をループする可能性があります)

関連する問題