我有一个按队列细分的数据框架(由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))
我该怎么做?
答案 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