r - 按组将值替换为同一列中的另一个值
问题描述
我在下面有一个数据集:
Date Group Value
2015-02-15 A 10
2015-02-23 A 422
2015-03-02 A 89
2015-02-15 B 32
2015-02-23 B 11
2015-02-15 C 30
2015-03-02 C 2
我想制定一个规则,对于每个组,如果出现一个值,则将该值2015-02-15
替换为 Date 2015-03-02
by group 的值。
预期输出:
Date Group Value
2015-02-15 A 89 <----replaced
2015-02-23 A 422
2015-03-02 A 89
2015-02-15 B 32 <----not replaced since 2015-03-02 doesn't exist
2015-02-23 B 11
2015-02-15 C 2 <----replaced
2015-03-02 C 2
解决方案
这是使用 tidyverse 的解决方案。这个想法是创建另一个替换值的数据框。我通过仅过滤到 3 月 2 日来做到这一点(因为这些是您要使用的值)。然后我将它加入到原始数据框中。从那里,您可以case_when
说,如果日期是 2 月 15 日并且有新值可用,则使用该值,否则使用原始值。
library(tidyverse)
df <- data_frame(
Date = c("2015-02-15", "2015-02-32", "2015-03-02", "2015-02-15",
"2015-02-23", "2015-02-15", "2015-03-02"),
Group = c("A", "A", "A", "B", "B", "C", "C"),
Value = c(10, 422, 89, 32, 11, 30, 2)
)
df
#> # A tibble: 7 x 3
#> Date Group Value
#> <chr> <chr> <dbl>
#> 1 2015-02-15 A 10
#> 2 2015-02-32 A 422
#> 3 2015-03-02 A 89
#> 4 2015-02-15 B 32
#> 5 2015-02-23 B 11
#> 6 2015-02-15 C 30
#> 7 2015-03-02 C 2
replace_values <- df %>%
filter(Date == "2015-03-02") %>%
select(Group, new_value = Value)
replace_values
#> # A tibble: 2 x 2
#> Group new_value
#> <chr> <dbl>
#> 1 A 89
#> 2 C 2
df %>%
group_by(Group) %>%
left_join(replace_values, by = "Group") %>%
mutate(
Value = case_when(
Date == "2015-02-15" & !is.na(new_value) ~ new_value,
TRUE ~ Value
)
) %>%
select(-new_value)
#> # A tibble: 7 x 3
#> # Groups: Group [3]
#> Date Group Value
#> <chr> <chr> <dbl>
#> 1 2015-02-15 A 89
#> 2 2015-02-32 A 422
#> 3 2015-03-02 A 89
#> 4 2015-02-15 B 32
#> 5 2015-02-23 B 11
#> 6 2015-02-15 C 2
#> 7 2015-03-02 C 2
由reprex 包(v0.2.1)于 2018 年 10 月 31 日创建
推荐阅读
- emotion - 条件关键帧不工作,而其他属性工作正常。前任。动画不工作,而字体大小工作正常
- javascript - 在不使用“缩放”的情况下调整 FabricJS 中的多边形、折线、线的大小
- c# - 在父方法中使用子属性
- javascript - 数组中的值如何随 Jquery 移动?
- sas - 从数值到时间值
- ios - SWIFT ABI 在哪里发挥作用?
- c - exec,execvp,execl,execv之间的区别?
- movesense - 无法在 movesense 设备上写入 EEPROM
- amp-html - 我需要将 onclick 函数重写为可以为 Google AMP 处理的代码
- popup - 如何在鼠标悬停和单击时在 OpenLayers 5 中实现功能弹出窗口