我有一个数据帧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中的日期
谢谢
答案 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))