r - 重塑数据框
问题描述
我有与以下非常相似的数据框
指数 | 日期 | 结果 |
---|---|---|
AAA111 | 2021 年 5 月 19 日 | 赢 |
AAA111 | 29/05/2021 | 失去 |
AAA112 | 2021 年 5 月 19 日 | 赢 |
AAA112 | 24/05/2021 | 赢 |
AAA113 | 29/05/2021 | 失去 |
我想得到这样的东西
指数 | 日期_1 | 日期_2 | 结果_day_1 | 结果_day_2 |
---|---|---|---|---|
AAA111 | 2021 年 5 月 19 日 | 29/05/2021 | 赢 | 失去 |
AAA112 | 2021 年 5 月 19 日 | 24/05/2021 | 赢 | 赢 |
AAA113 | 29/05/2021 | 不适用 | 失去 | 不适用 |
并非所有指数的天数都与上述相同。
解决方案
我们可以使用pivot_wider
library(dplyr)
library(tidyr)
library(data.table)
df1 %>%
mutate(nm = rowid(index)) %>%
pivot_wider(names_from = nm, values_from = c(date, result))
-输出
# A tibble: 3 × 5
index date_1 date_2 result_1 result_2
<chr> <chr> <chr> <chr> <chr>
1 AAA111 19/05/2021 29/05/2021 Win Lose
2 AAA112 19/05/2021 24/05/2021 Win Win
3 AAA113 29/05/2021 <NA> Lose <NA>
或与data.table
library(data.table)
dcast(setDT(df1), index ~ rowid(index), value.var = c('date', 'result'))
index date_1 date_2 result_1 result_2
1: AAA111 19/05/2021 29/05/2021 Win Lose
2: AAA112 19/05/2021 24/05/2021 Win Win
3: AAA113 29/05/2021 <NA> Lose <NA>
数据
df1 <- structure(list(index = c("AAA111", "AAA111", "AAA112", "AAA112",
"AAA113"), date = c("19/05/2021", "29/05/2021", "19/05/2021",
"24/05/2021", "29/05/2021"), result = c("Win", "Lose", "Win",
"Win", "Lose")), class = "data.frame", row.names = c(NA, -5L))
推荐阅读
- node.js - 构造函数方法未在 Typescript 中设置属性
- vb.net - 有一个更好的方法吗?无需声明那些被检查为假的
- python - 计算具有零的列数
- jestjs - 期望数组参数具有设置长度
- html - Textarea占位符奇怪的差距(reactjs)
- jquery - 使用 Dropdownlist Visual Basic 调用 MVC actionResult
- c++ - 设置数组元素时的奇怪结果(C++/pybind11)
- r - 如何用 R 语言在 LaTeX 中的“正常”句子中格式化 R 代码?
- python - 我的 while 循环中的变量没有被更新
- java - 在代码下找不到任何消息...对于语言环境 en_US