gpt4 book ai didi

r - 有条件地使用replace_na

转载 作者:行者123 更新时间:2023-12-01 16:28:35 25 4
gpt4 key购买 nike

我想使用 tidyverse 有条件地将 2017 年 7 月 16 日之前缺失的收入替换为零。

我的数据

library(tidyverse)
library(lubridate)

df<- tribble(
~Date, ~Revenue,
"2017-07-01", 500,
"2017-07-02", 501,
"2017-07-03", 502,
"2017-07-04", 503,
"2017-07-05", 504,
"2017-07-06", 505,
"2017-07-07", 506,
"2017-07-08", 507,
"2017-07-09", 508,
"2017-07-10", 509,
"2017-07-11", 510,
"2017-07-12", NA,
"2017-07-13", NA,
"2017-07-14", NA,
"2017-07-15", NA,
"2017-07-16", NA,
"2017-07-17", NA,
"2017-07-18", NA,
"2017-07-19", NA,
"2017-07-20", NA
)

df$Date <- ymd(df$Date)

我想要有条件更换 NA 的截止日期

max.date <- ymd("2017-07-16")

我想要的输出

    # A tibble: 20 × 2
Date Revenue
<chr> <dbl>
1 2017-07-01 500
2 2017-07-02 501
3 2017-07-03 502
4 2017-07-04 503
5 2017-07-05 504
6 2017-07-06 505
7 2017-07-07 506
8 2017-07-08 507
9 2017-07-09 508
10 2017-07-10 509
11 2017-07-11 510
12 2017-07-12 0
13 2017-07-13 0
14 2017-07-14 0
15 2017-07-15 0
16 2017-07-16 0
17 2017-07-17 NA
18 2017-07-18 NA
19 2017-07-19 NA
20 2017-07-20 NA

解决这个问题的唯一方法是将 df 分成几个部分,更新 NA,然后rbind 全部。

有人可以帮助我使用 tidyverse 有效地完成此操作吗?

最佳答案

我们可以使用检查元素是否为 NA 的逻辑条件来变异“收入”列,以将 NA 替换为 0 “日期”小于或等于“最大日期”

df %>% 
mutate(Revenue = replace(Revenue, is.na(Revenue) & Date <= max.date, 0))
# A tibble: 20 x 2
# Date Revenue
# <date> <dbl>
# 1 2017-07-01 500
# 2 2017-07-02 501
# 3 2017-07-03 502
# 4 2017-07-04 503
# 5 2017-07-05 504
# 6 2017-07-06 505
# 7 2017-07-07 506
# 8 2017-07-08 507
# 9 2017-07-09 508
#10 2017-07-10 509
#11 2017-07-11 510
#12 2017-07-12 0
#13 2017-07-13 0
#14 2017-07-14 0
#15 2017-07-15 0
#16 2017-07-16 0
#17 2017-07-17 NA
#18 2017-07-18 NA
#19 2017-07-19 NA
#20 2017-07-20 NA
<小时/>

可以使用 data.table 来实现,方法是指定“i”中的逻辑条件并将“Revenue”分配 (:=) 0

library(data.table)
setDT(df)[is.na(Revenue) & Date <= max.date, Revenue := 0]
<小时/>

或者使用基础R

df$Revenue[is.na(df$Revenue) & df$Date <= max.date] <- 0

关于r - 有条件地使用replace_na,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45095789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com