首页 > 解决方案 > 重构数据框

问题描述

我有以下数据框:

grp       dates  count
A    2018-01-01     10
A    2018-01-02     20
A    2018-01-03     25
A    2018-01-04     30
B    2018-01-03     10
B    2018-01-04     30
...

但是,我想以这种形式拥有它:

dates        A   B ...
2018-01-01  10  NA
2018-01-02  20  NA
2018-01-03  25  10
2018-01-04  30  30

转换它的最简单方法是什么?哪种形式更好?

grp <- c("A", "A", "A", "A", "B", "B")
count <- c(10, 20, 25, 30, 10, 30)
dates <- c("2018-01-01", "2018-01-02", "2018-01-03", "2018-01-04", "2018-01-03", "2018-01-04")

df <- data.frame(grp, count, dates)
df

标签: rdataframetidyverse

解决方案


您的dates向量与您展示的示例数据不同,因为它有一个重复的 date 2018-01-01。假设这是一个错误,您可以执行以下操作:

grp <- c("A", "A", "A", "A", "B", "B")
count <- c(10, 20, 25, 30, 10, 30)
dates <- c("2018-01-01", "2018-01-02", "2018-01-03", "2018-01-04", "2018-01-03", "2018-01-04")

df <- data.frame(grp, count, dates)

library(tidyr)
df %>% pivot_wider(names_from = grp, values_from = count)
#> # A tibble: 4 x 3
#>   dates          A     B
#>   <fct>      <dbl> <dbl>
#> 1 2018-01-01    10    NA
#> 2 2018-01-02    20    NA
#> 3 2018-01-03    25    10
#> 4 2018-01-04    30    30

reprex 包(v0.2.1)于 2020-03-18 创建


推荐阅读