根据多个日期条目创建新列

时间:2020-07-24 04:34:38

标签: r mutate

我有一个数据帧df

date        tss
2020-07-03  76
2020-07-03  49
2020-07-04  NA
2020-07-05  NA
2020-07-06  100
2020-07-06  76
2020-07-07  37
2020-07-08  104
2020-07-09  53
2020-07-10  116
2020-07-10  79

我要实现的目的是创建一个新列(tss2),如果该列在同一日期重复两次,则该列将包含tss列中的值。

我想我需要在if语句中使用Mutate吗?

我想要实现的示例输出:

date        tss     tss2
2020-07-03           76
2020-07-03   49
2020-07-04           NA
2020-07-05   NA

date被分类为df中的日期

谢谢

1 个答案:

答案 0 :(得分:1)

您可以尝试重塑数据,以便解决方案足够灵活以容纳更多列。

library(dplyr)

df %>%
  mutate(row = row_number()) %>%
  group_by(date) %>%
  mutate(colname = paste0('tss', rev(row_number()))) %>%
  tidyr::pivot_wider(names_from = colname, values_from = tss) %>%
  select(-row)

#  date        tss2  tss1
#   <chr>      <int> <int>
# 1 2020-07-03    76    NA
# 2 2020-07-03    NA    49
# 3 2020-07-04    NA    NA
# 4 2020-07-05    NA    NA
# 5 2020-07-06   100    NA
# 6 2020-07-06    NA    76
# 7 2020-07-07    NA    37
# 8 2020-07-08    NA   104
# 9 2020-07-09    NA    53
#10 2020-07-10   116    NA
#11 2020-07-10    NA    79

数据

df <- structure(list(date = c("2020-07-03", "2020-07-03", "2020-07-04", 
"2020-07-05", "2020-07-06", "2020-07-06", "2020-07-07", "2020-07-08", 
"2020-07-09", "2020-07-10", "2020-07-10"), tss = c(76L, 49L, 
NA, NA, 100L, 76L, 37L, 104L, 53L, 116L, 79L)), 
class = "data.frame", row.names = c(NA, -11L))