r - 在基于新数据框的排序和分组数据上显示字段
问题描述
我有一个数据集,我希望在新数据框中显示汇总结果。到目前为止,我已经创建了前两列,它们是所有唯一 ID 和该 ID 的唯一案例编号的数量。现在我希望创建额外的列,将每个案例编号的“代码”显示为第一种情况、第二种情况等列。逻辑是,列会显示与案件编号对应的代码,如果案件编号相同,则首先显示日期最早的,然后在其后的列中显示较晚的。然后是同一ID的不同案件编号的其他“代码”。任何帮助将不胜感激,因为我不知道该怎么做,谢谢!
期望的结果:
ID cases.unique 1st Case 2nd Case 3rd Case 4th Case
1 100 1 715.10 724.50
2 200 2 717.00 300.02 366.90 444.22
3 300 1 717.00
4 400 1 465.80 785.00
5 500 1 309.00
数据:
x <- data.frame("ID" = c(100, 100, 200, 200, 200, 200, 300, 400, 400, 500),
"Case Number" = c(1111, 1111, 1000, 1000, 1001, 1001, 9999, 1422, 1422, 1522),
"Date" = c("2013/07/15", "2013/09/23", "2016/06/21", "2016/09/18", "2016/10/20", "2016/08/06", "2017/08/21", "2016/08/23", "2016/08/24","2016/08/14"),
"Code" = c(715.1, 724.5,717,366.9,444.22,300.02,717,465.8,785,309.0))
到目前为止我所拥有的:
x2 <- x %>%
group_by(ID) %>%
summarize(
cases.unique = n_distinct(Case.Number)
)
解决方案
您需要一个mutate
而不是summarise
,然后spread
使用select
删除不必要的列之后的数据。
library(tidyverse)
x %>%
group_by(ID) %>%
mutate(
cases.unique = n_distinct(Case.Number),
case = paste("case", 1:n())
) %>%
select(-Date, -Case.Number) %>%
spread(key = case, value = Code, fill = "")
# A tibble: 5 x 6
# Groups: ID [5]
ID cases.unique `case 1` `case 2` `case 3` `case 4`
<dbl> <int> <chr> <chr> <chr> <chr>
1 100 1 715.1 724.5 "" ""
2 200 2 717 366.9 444.22 300.02
3 300 1 717 "" "" ""
4 400 1 465.8 785 "" ""
5 500 1 309 "" "" ""
推荐阅读
- reactjs - React Context:错误:尽管嵌套在 Provider 中,但 userState 必须在 UserProvider 中使用?
- amazon-web-services - linkedin 作为 aws 的联合身份提供者
- verilog - 警告:推断变量“w_addra_t”的锁存器(在带有 FOR 循环的 Verilog/SystemVerilog 中)
- python - 有条件地替换熊猫数据框中数组列表中的值
- xamarin.forms - 如何通过 ContentPage 传递多个标签
- javascript - Vue.js 将对象推送到数组将数组中的每个元素更改为相同
- javascript - 在 React Router 中重写自定义路由以使用渲染道具而不是组件道具
- java - 如何从 Java PreparedStatement 更新 MySql 中的时间戳字段?
- c - 直接访问结构中的联合
- r - 在 R 中运行 `grangertest()` 时允许使用别名系数