【问题标题】:calculate the difference between groups as a percentage计算组之间的差异百分比
【发布时间】:2021-09-13 03:15:16
【问题描述】:

我有一个日期框架:

data <- structure(list(col1 = c(10L, 8L, 5L, 4L, 6L, 3L), col2 = c(11L, 
9L, 6L, 3L, 4L, 6L), col3 = c(12L, 10L, 7L, 5L, 7L, 7L), group = c("a", 
"a", "b", "b", "c", "c")), class = "data.frame", row.names = c(NA, 
-6L))

我想找出所有组之间的差异(a -b;a-c; b-c),并计算数字的百分之几(第一个数字被视为 100%)

我想得到什么:

【问题讨论】:

  • 你能解释一下这里的计算吗?为什么col1_new 的百分比只有一个数字,其余的数字为 2?你如何计算百分比?
  • 'a','a',b','b' 所以必须有 4 对 'a-b','a-b','a-b','a-b' .不是吗?
  • 我成对相减,取第一个数为100%,然后相减,计算出这个数的百分之几。例如,col1_new 计算如下从 col1 10 从 a 组中得到 100% 然后我们减去 b 组 5 我们得到 5 它是 10 的 50%,然后从 a 组中的 8 我从 b 组中减去 4 我得到 4 它是 8 的 50%,以此类推
  • 你能解释一下col2_new 的例子吗?为什么那里有2个数字? (45, 45%)
  • ", "is the same as". " 这些是数字的分数。 11 是 a 组的 100% 我们从 b 组中减去 6 我们得到 5 是 11 的 45.45%。9 的第二个值是 a 组的 100% 我们从 b 组中减去 4 的第二个值我们得到 5 是 55.56% 9

标签: r dataframe difference


【解决方案1】:

这是使用combn 的基本 R 方法 -

do.call(rbind, combn(unique(data$group), 2, function(x) {
  dt1 <- subset(data, group == x[1])
  dt2 <- subset(data, group == x[2])
  val1 <- abs(dt1[-4] - dt2[-4])
  val2 <- val1/dt1[-4]
  val2[] <- sprintf('%s (%s %%)', round(as.matrix(val1), 2),
                                  round(as.matrix(val2) * 100, 2))
  data.frame(val2, group = paste0(x, collapse = '-'))
}, simplify = FALSE))

#         col1        col2        col3 group
#1    5 (50 %) 5 (45.45 %) 5 (41.67 %)   a-b
#2    4 (50 %) 6 (66.67 %)    5 (50 %)   a-b
#3    4 (40 %) 7 (63.64 %) 5 (41.67 %)   a-c
#4  5 (62.5 %) 3 (33.33 %)    3 (30 %)   a-c
#31   1 (20 %) 2 (33.33 %)     0 (0 %)   b-c
#41   1 (25 %)   3 (100 %)    2 (40 %)   b-c

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 2020-11-27
    • 2023-02-13
    • 1970-01-01
    • 2021-06-17
    • 2021-01-05
    • 1970-01-01
    相关资源
    最近更新 更多