3

アレンジとミューテートの組み合わせを使用して、グループ化に基づいて追加を行いました。たとえば、私は次のものを使用しました。

master_df <-group_by(master_df,asof_dt)
mutate(master_df,tot_flag=ls_flag)

これにより、データ フレーム master_df が asof_dt でグループ化され、tot_flag が作成され、日付ごとに ls_flag が追加されます。

ただし、私の ls_flag 列には NA が含まれています。

私は次のことをしたいと思います: 1) NA を無視して ls_flag を追加する方法を見つけます。2) 1 日あたりの NA の総数を追加する方法を見つけます。

完全な例は次のとおりです。

asof_dt<-c("2014-10-01","2014-10-01","2014-10-01","2014-10-02","2014-10-02","2014-10-02")
ls_flag<-c(1,1,NA,NA,1,1)
master_df<-data.frame(asof_dt,ls_flag)
master_df <-group_by(master_df,asof_dt)
mutate(master_df,tot_flag=sum(ls_flag))

どうもありがとうございました!

4

2 に答える 2

5

これはあなたの望む結果ですか?na.rm = TRUE次のオプションを使用できsum()ます。

master_df %>%
  group_by(asof_dt) %>%
  mutate(tot_flag = sum(ls_flag, na.rm = TRUE),
         tot_NA = sum(is.na(ls_flag)))

#Source: local data frame [6 x 4]
#Groups: asof_dt
#
#     asof_dt ls_flag tot_flag tot_NA
#1 2014-10-01       1        2      1
#2 2014-10-01       1        2      1
#3 2014-10-01      NA        2      1
#4 2014-10-02      NA        2      1
#5 2014-10-02       1        2      1
#6 2014-10-02       1        2      1

または、単に「要約」が必要な場合もあります (を使用summarise):

master_df %>%
  group_by(asof_dt) %>%
  summarise(tot_flag = sum(ls_flag, na.rm = TRUE),
            tot_NA = sum(is.na(ls_flag)))
#Source: local data frame [2 x 3]
#
#     asof_dt tot_flag tot_NA
#1 2014-10-01        2      1
#2 2014-10-02        2      1
于 2014-11-07T17:15:18.200 に答える
3

合計:

> aggregate(ls_flag~asof_dt, data=master_df, sum)
     asof_dt ls_flag
1 2014-10-01       2
2 2014-10-02       2

また:

> with(master_df, tapply(ls_flag, asof_dt, sum, na.rm=T))
2014-10-01 2014-10-02 
         2          2 

NA の数:

> with(master_df, tapply(ls_flag, asof_dt, function(x) sum(is.na(x))))
2014-10-01 2014-10-02 
         1          1 
于 2014-11-07T17:42:58.670 に答える