r - dplyr中的条件求和
问题描述
我有以下数据框:
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
推荐阅读
- r - R ggplot:如何使用边缘箱形图创建散点图
- javascript - 按属性内对象中的自定义顺序排序
- java - 是否可以在单元测试中绕过某些异常?
- java - 添加 JLabel 和 JButton 后看不到 JTextField
- java - 在 Spring Boot / FreeMarker 中加载图像时出现问题
- javascript - Javascript不调用函数
- optimization - 优化 applescript 以减少能源影响
- android - 无法在 Android Studio 3.1.4 中放置智能横幅广告 & 应用程序崩溃。我应该使用哪些依赖项?
- java - 此方法调用为非空方法参数传递空值。要么将参数注释为应始终为非空的参数
- javascript - 与 vuex store + cookie 有关的问题