我有以下数据框:
df <- structure(list(Claim2015 = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Claim2016 = c(1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0), Claim2017 = c(0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1), Claim2018 = c(0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1), Claim2019 = c(0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0)), row.names = c(NA, -20L), class = c("tbl_df", "tbl", "data.frame"))
我想创建一个有条件的求和,即在2015年提出索赔的人中,2016年提出了要求;在这两者中,2017年有多少,以此类推(总和将会减少)。
因此,预期输出为:
db <- data_frame(Had2015 = 20, Had2016 = 15, Had2017 = 9, Had2018 = 7, Had2019 = 5)
我开始做的是
df1 <- df %>% group_by_all %>% count
这以一种易于计数的方式来组织输出-所以我将n
那些1,那些1和1,那些1&1和1等等的总和-只是不知道该怎么做这是自动的。
任何帮助,将不胜感激。
使用基数R,我们可以递增地遍历每一列,并用全部1计算行数。
sapply(seq_along(df), function(x) sum(rowSums(df[1:x] == 1) == x)) #[1] 20 15 9 7 5