我试图从我们的商店订购工具中减少和简化数据集。我们的工具将每个订单行导出为具有重复值的新订单。例如,当前的出口类似于:
ORDER PRODUCT STORE OPTIONAL PRICE
<chr> <chr> <chr> <chr> <dbl>
1 ord1 p1 s1 Y 3
2 ord2 p2 s2 N 2
3 ord3 p3 s3 Y 3
4 ord3 p2 s3 N 5
5 ord3 p2 s3 Y 6
6 ord4 p3 s2 Y 1下面是示例的代码:
data <- tibble("ORDER"=c("ord1","ord2","ord3","ord3","ord3","ord4"),"PRODUCT"=c("p1","p2","p3","p2","p2","p3"),STORE=c("s1","s2","s3","s3","s3","s2"),"OPTIONAL"=c("Y","N","Y","N","Y","Y"),"PRICE"=c(3,2,3,5,6,1))我的目标是创建一个具有以下内容的数据集:
我设法把桌子旋转起来:
> data_wide <- data %>%
+ pivot_wider(names_from = PRODUCT, values_from = PRICE, values_fill = NA ,
+ values_fn = list(PRICE = sum))现在我有了这只老虎:
ORDER STORE OPTIONAL p1 p2 p3
<chr> <chr> <chr> <dbl> <dbl> <dbl>
1 ord1 s1 Y 3 NA NA
2 ord2 s2 N NA 2 NA
3 ord3 s3 Y NA 6 3
4 ord3 s3 N NA 5 NA
5 ord4 s2 Y NA NA 1我想要创建一个表格,如:
ORDER STORE OPTIONAL p1 p2 p3
<chr> <chr> <chr> <dbl> <dbl> <dbl>
1 ord1 s1 Y 3 NA NA
2 ord2 s2 N NA 2 NA
3 ord3 s3 Y NA 11 3
4 ord4 s2 Y NA NA NA对于每一种产品,我都有支付的总价,我知道客户是否要求一个可选的产品(我不在乎哪种产品)。我不知道该如何面对:
谢谢!
发布于 2021-07-04 14:27:32
您可以使用dplyr和tidyr
library(dplyr)
library(tiydr)
data %>%
pivot_wider(names_from="PRODUCT", values_from="PRICE", values_fill=0) %>%
mutate(OPTIONAL = OPTIONAL == "Y") %>%
group_by(ORDER, STORE) %>%
summarise(across(c("OPTIONAL", matches("p\\d+")), ~ sum(.x)), .groups="drop") %>%
mutate(OPTIONAL = ifelse(OPTIONAL > 0, "Y", "N"),
across(matches("p\\d+"), ~na_if(.x,0))) 返回
# A tibble: 4 x 6
ORDER STORE OPTIONAL p1 p2 p3
<chr> <chr> <chr> <dbl> <dbl> <dbl>
1 ord1 s1 Y 3 NA NA
2 ord2 s2 N NA 2 NA
3 ord3 s3 Y NA 11 3
4 ord4 s2 Y NA NA 1https://stackoverflow.com/questions/68245620
复制相似问题