R中第一次计算的百分比

时间:2015-05-01 17:15:58

标签: r

我有一个按队列细分的数据框架(由first_week表示)。 “订单n”列具有每个群组的计数,它们是第n个订单。

Ordercounts <- data.frame(first_week = c("Week 1", "Week 2", "Week 3"),
                      "Order 1" = c(100,80,150),
                      "Order 2" = c(86,60,75),
                      "Order 3" = c(60,40,50))

我需要的是计算每个队列的第n个人的百分比(作为保留的度量)。我想要的输出是:

Output <- data.frame(first_week = c("1", "2", "3"),
                      "Order 1" = c(1, 1, 1),
                      "Order 2" = c(.86, .75, .5),
                      "Order 3" = c(.6, .5 , .333))

我该怎么做?

2 个答案:

答案 0 :(得分:2)

以下是基础R解决方案:

res <- (function(x) x/x[[1]] )(Ordercounts[,-1])

第一个括号之间的部分是一个函数,允许您避免重复写入“Ordercounts”。您可以改为使用res <- Ordercounts[,-1]/Ordercounts[,-1][[1]],但如果您习惯使用非常长的变量名,则这很容易出错。

此过程还允许您忽略列名称。在更改名称或想以类似方式接近另一个data.frame时,键入它们可能同样容易出错。

您可以查看cbind(Ordercounts[,1,drop=FALSE],res)以获得所需的格式:

  first_week Order.1 Order.2   Order.3
1     Week 1       1    0.86 0.6000000
2     Week 2       1    0.75 0.5000000
3     Week 3       1    0.50 0.3333333

答案 1 :(得分:1)

使用dplyr:

Ordercounts %>%  
    mutate_each(funs(./Order.1), rev(starts_with("Order")))

或者,更长,但可能更“好”的解决方案:

Ordercounts %>%  
    mutate(x=Order.1) %>% 
    mutate_each(funs(./x), starts_with("Order")) %>%
    select(-x)

Theres可能仍然是一个更好的解决方案

  first_week Order.1 Order.2   Order.3
1     Week 1       1    0.86 0.6000000
2     Week 2       1    0.75 0.5000000
3     Week 3       1    0.50 0.3333333