2017-05-21 8 views
0

私はこれが愚かな質問だと思うが、まだ私はRの新機能であるため、構文に関する助けが必要だと思う。R - forループのデータフレームに行を追加しますか?

私は5列の空のデータフレームを持っている。各行について、pgsqlクエリは、ループの各繰り返しでデータフレームに追加する必要がある5つの値の行をフェッチします。

Exiting_df:

Mat CrA Cur Dil Ccl 
NA Na Na Na Na 

ループの各反復はそのようなpgsqlのクエリからの値の新しいデータフレームをもたらします:

Mat CrA Cur Dil Ccl 
5 13 9 44 2 

これがそうのようExisting_dfに追加になるだろう:iにおける = 1:

Mat CrA Cur Dil Ccl 
5 13 9 44 2 

i = 2の場合:

Mat CrA Cur Dil Ccl 
5 13 9 44 2 
11 1 113 41 11 

でI = 3:これは

Mat CrA Cur Dil Ccl 
5 13 9 44 2 
11 1 113 39 11 
14 22 79 54 12 

など.. forループ:

for (i in 1:nrow(month_stats)) 
{ 
status_counts <- tbl(con_cg_db,sql(
paste("select distinct stagename, 
     sum(case when stagename is not null then 1 else 0 end) 
     from current_oppty_sf 
     where extract(month from cast(loan_agreement_date__c as date)) = ",i," 
     group by stagename",sep="") 
)) 
status_counts<- t(as.data.frame(status_counts)) 
### something needs to go here to appropriately combine the data 
###frames as I've described in my question 
} 

時々、データに応じて、データフレームがもたらす価値pgsql問合せからは3〜4列のみが使用されます。その場合、欠落している列は、主データフレームのそれぞれの行&の列で自動的に0を取る必要があります。

どうすればよいですか?

+0

答えの簡単な例を作ってください。 –

+0

まずSOを検索することを検討してください。これには数多くの例があります。 '[r] do.call rbind'を試してください。 –

答えて

0
require(dplyr) 

df<- c() 

for (i in 1:nrow(month_stats)) 
    { 
    status_counts <- tbl(con_cg_db,sql(
    paste("select distinct stagename, 
      sum(case when stagename is not null then 1 else 0 end) 
      from current_oppty_sf 
      where extract(month from cast(loan_agreement_date__c as date)) = ",i," 
      group by stagename",sep="") 
    )) 
    status_counts<- t(as.data.frame(status_counts)) 
    df <- bind_rows(df, status_counts) 
    } 

ゼロの代わりに、このコードは、値がない場合にはNAを返します。ゼロを実際に使用する場合は、ループの後に挿入することができます。

df[is.na(df)] <- 0 
関連する問題