r - R:取消堆叠带有日期的列
问题描述
假设我有以下数据框:
df <- data.frame(Order=c("1234567","1234567","1234567","456789","456789"),Stage=c("Pipeline","Proposal","Closed","Pipeline","Lost"),StageChange=c("2008-01-01","2008-01-02","2008-01-03","2008-01-10","2008-01-12"))
导致:
head(df)
Order Stage StageChange
1 1234567 Pipeline 2008-01-01
2 1234567 Proposal 2008-01-02
3 1234567 Closed 2008-01-03
4 456789 Pipeline 2008-01-10
5 456789 Lost 2008-01-12
我需要解开“阶段”列并进入这样的数据框:
Order Pipeline Proposal Closed Lost
1 1234567 2008-01-01 2008-01-02 2008-01-03 NA
2 456789 2008-01-10 NA NA 2008-01-12
我阅读了文档并尝试了使用 dplyr 和 tidyr 的不同方法(就像在这个线程中一样),但我的无知正在获胜。
有什么想法可以完成我需要的吗?
明确地说,我的目标是使用这些数据来计算特定订单在特定阶段花费的天数。一些订单丢失,其他订单已关闭(赢),这就是为什么有“NA”值的原因。当订单没有更改到特定阶段时也会发生同样的情况(订单可以从管道转到丢失,中间阶段没有任何更改)。
谢谢!
解决方案
你可能会使用tidyr::pivot_wider
. 那是退休功能的新版本spread
# install.packages("tidyr")
library(tidyr)
df %>%
pivot_wider(names_from = Stage, values_from = StageChange)
# # A tibble: 2 x 5
# Order Pipeline Proposal Closed Lost
# <fct> <fct> <fct> <fct> <fct>
# 1 1234567 2008-01-01 2008-01-02 2008-01-03 NA
# 2 456789 2008-01-10 NA NA 2008-01-12
推荐阅读
- email - 为我的邮件服务器设置 DNS 记录 - DMARC 和 SPF - 添加到所有域还是只添加到邮件服务器域?
- javascript - Firebase 请求 url 在网络选项卡的请求有效负载中显示用户名和密码
- macos - Docker 系统修剪会留下大量(42GB)图像数据
- azure - 从 on-permise 到 Azure 的连接速度很慢
- sql - 使用 group by 时可以避免聚合吗?
- angular-cli - 在 Angular 中安装新项目后出现奇怪的错误
- javascript - 如何将 NeDB 对象存储在集合中?
- c# - 使用 Azure Key Vault 签署 JWT 令牌
- npm - NPM 错误:npm 错误!无法确定要运行的可执行文件
- php - 在 WooCommerce 中禁用特定产品的取消订阅