r - 将同一日期具有 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 但没有成功。
谢谢你。
解决方案
尝试这个:
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