r - 计数不同并计算两列中的百分比差异 ifrom R dataframe

标签 r dplyr

有一个简单的数据框,列出每几个月的产品类型和标签号:

data.frame(
  stringsAsFactors = FALSE,
                month = c("jan","jan","jan","jan",
                       "jan","feb","feb","feb","feb"),
                category = c("TB", "GT", "TB", "YT", "GT", "TB", "GT", "TB", "YT"),
                tag_number = c(101L, 101L, 223L, 223L, 223L, 345L, 345L, 655L, 223L)
)

month category tag_number

jan      TB     101
jan      GT     101
jan      TB     223
jan      YT     223
jan      GT     223
feb      TB     345
feb      GT     345
feb      TB     655
feb      YT     223

我想按月份和类别比较和提取唯一 tag_number 值之间的百分比差异。

让我再解释一下,因为这似乎是一个复杂的问题。

如果我们得到分组的月份和类别,我们就可以比较这个表(月份+类别)

Jan  TB  101, 223    vs.    Feb  TB  345, 655
Jan  GT  101, 223    vs.    Feb  GT  345
Jan  YT  223         vs.    Feb  YT  223

1 月份,结核病类别有两个唯一的标签编号(101 和 223)。如果您与 February 进行比较,也有两个独特的标签,但它们都不相等,因此月份之间的百分比差异为 100%,并且在这两种情况下不同的计数都是 2。

GT 类别相同。所有标签都不同。所以又是 100%。

不同的情况是 YT。两个月包含相同的标签号,因此差异为 0%

这里是预期的结果。差异百分比是月份之间不同的案例百分比。

让我们以 TB 类别为例。

总共 4 个唯一值,每月 2 个唯一值,没有一个相等:

4/4 = 1(所以 100%)

category   pct_diff
TB           100%
GT           100%
YT             0%

最佳答案

df %>%
   group_by(category) %>%
   summarise(perc_diff = 100 * mean(table(tag_number) == 1))

# A tibble: 3 x 2
  category perc_diff
  <chr>        <dbl>
1 GT             100
2 TB             100
3 YT               0

关于r - 计数不同并计算两列中的百分比差异 ifrom R dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70126028/

相关文章:

r - 在 dplyr 1.0.0 中使用 case_when 跨多个列应用条件

r - 使用 dplyr 拟合多个回归模型

r - 使用 dplyr::mutate() 修改任意列属性

r - 是否存在用于与all = TRUE合并的R dplyr方法?

r - 按两个向量提供的范围过滤,无需连接操作

r - 检查列表的所有元素在 R 中是否相等

javascript - 传单R,如何使与 child 统计相关的集群图标出现?

在 R 中使用字符串变量引用公式中的列名称

r - 如何叠加之前使用 ggplot2 创建的直方图?

r - 计算两个日期之间的时间差并将其添加到新列