首页 > 解决方案 > 将同一日期具有 2 个值的值移动到新列中

问题描述

问了一个类似的先前问题,但似乎无法更改代码以获得所需的结果:

我的数据框是df:

    date    tss
 2020-05-29  71
 2020-05-29  60
 2020-05-30  42
 2020-05-31  NA
 2020-06-01  95
 2020-06-01  82
 2020-06-02  69
 2020-06-03 103
 2020-06-04  49
 2020-06-05  74
 2020-06-05  49
 2020-06-06  NA
 2020-06-07  NA
 2020-06-08  NA
 2020-06-09  50
 2020-06-10 191
 2020-06-11 125
 2020-06-11 126
 2020-06-12 104
 2020-06-12  77

想将多次出现(同一天两次)的 tss 分数移动到一个新列中,其中每个日期只有一行(日期被归类为日期)。

例如:

 date        tss   tss2
 2020-05-29  71     60
 2020-05-30  42     0
 2020-05-31  NA
 2020-06-01  95     82

同一日期只会有 2 个 tss 条目。尝试使用 group_by 和 pivot_wider 但没有成功。

谢谢你。

标签: rdplyr

解决方案


尝试这个:

library(tidyverse)

#Data
df <- structure(list(date = c("2020-05-29", "2020-05-29", "2020-05-30", 
"2020-05-31", "2020-06-01", "2020-06-01", "2020-06-02", "2020-06-03", 
"2020-06-04", "2020-06-05", "2020-06-05", "2020-06-06", "2020-06-07", 
"2020-06-08", "2020-06-09", "2020-06-10", "2020-06-11", "2020-06-11", 
"2020-06-12", "2020-06-12"), tss = c(71L, 60L, 42L, NA, 95L, 
82L, 69L, 103L, 49L, 74L, 49L, NA, NA, NA, 50L, 191L, 125L, 126L, 
104L, 77L)), class = "data.frame", row.names = c(NA, -20L))

#Code
df %>% group_by(date) %>% mutate(i=row_number(date)) %>%
  pivot_wider(names_from = i,values_from = tss)

# A tibble: 15 x 3
# Groups:   date [15]
   date         `1`   `2`
   <chr>      <int> <int>
 1 2020-05-29    71    60
 2 2020-05-30    42    NA
 3 2020-05-31    NA    NA
 4 2020-06-01    95    82
 5 2020-06-02    69    NA
 6 2020-06-03   103    NA
 7 2020-06-04    49    NA
 8 2020-06-05    74    49
 9 2020-06-06    NA    NA
10 2020-06-07    NA    NA
11 2020-06-08    NA    NA
12 2020-06-09    50    NA
13 2020-06-10   191    NA
14 2020-06-11   125   126
15 2020-06-12   104    77

推荐阅读