我已经使用了排列和变异组合来根据分组进行添加。例如,我使用了以下内容:
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&#39。
我想做以下事情: 1)找出如何添加ls_flag,忽略任何NA&#39; s 2)了解如何添加每天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))
非常感谢!
答案 0 :(得分:4)
这是你想要的结果吗?您可以使用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
答案 1 :(得分:2)
总结:
> 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
对于NAs的数量:
> with(master_df, tapply(ls_flag, asof_dt, function(x) sum(is.na(x))))
2014-10-01 2014-10-02
1 1