首页 > 解决方案 > 如何使用条件(如果或同时)替换 R 中的值?

问题描述

我正在尝试使用包含有关电价信息的数据。价格每 5 分钟登记一次。我的目标是用当天的平均值替换负值。

year month   day fivemin rrp_nsw rrp_qld rrp_sa rrp_tas rrp_vic
2009     7     1       1    16.9    17.6   16.7    15.7    15.5
2009     7     1       2    17.7    18.8   17.8    -16.1    15.5
2009     7     1       3    -17.7    18.6   18.1    15.9    15.4
2009     7     1       4    16.7    18.6   -17.6    14.3    12.8
2009     7     2       1    -15.6    17.6   16.3    13.2    11.8
2009     7     2       2    13.7    15.7   12.0    -11.1    -12.9
2009     7     2       3    13.7    15.8   11.9    11.1    12.9
2009     7     2       4    -13.9    16.1   -12.1    11.2    12.9
2009     8     1       1    13.8    16.0   12.2    11.2    12.8
2009     8     1       2    -13.7    16.3   11.6    10.6    12.6
2009     8     1       3    13.7    -15.8   11.9    11.0    12.7
2009     8     1       4    13.8    16.0   12.1    11.2    12.9
2009     8     2       1    17.6    -17.6   17.3    16.5    17.1
2009     8     2       2    17.7    17.6   17.3    16.8    17.4
2009     8     2       3    15.8    16.0   15.1    15.0    15.5
2009     8     2       4    -15.4    15.6   14.5    14.6    15.1
2009     9     1       1    14.7    15.0   13.8    14.0    14.5
2009     9     1       2    15.3    15.4   14.3    14.6    15.0
2009     9     1       3    15.3    15.6   14.4    14.5    15.0
2009     9     1       4    14.9    15.7   13.7    13.8    14.5

为了获得每天的平均值,我使用以下代码

Daily_mean<-Base %>%
arrange(year, month, day, fivemin) %>% #we are ordering the data 
group_by(year, month, day)%>%
summarise_at(
vars(c(rrp_nsw, rrp_qld, rrp_sa, rrp_tas, rrp_vic)),
.funs = funs(mean(.)))

当我得到每日平均值时,我想用当天的平均值替换每个负值。例如使用第 16 个观察值

2009     8     2       4    "8.925"    15.6   14.5    14.6    15.1

如果有人可以帮助我,我将不胜感激

标签: r

解决方案


在按相关列分组后,我们可以使用replacein将该列mutate_at的负值更改为mean

library(dplyr)
Base %>%
  arrange(year, month, day, fivemin) %>% 
  group_by(year, month, day) %>%
  mutate_at(vars(rrp_nsw, rrp_qld, rrp_sa, rrp_tas, rrp_vic), 
          ~ replace(., . < 0, mean(.)))

推荐阅读