如何计算列中每月发生的次数,并根据结果修改另一列

问题描述 投票:0回答:1

我是R的新人,我有一个问题。我有一个包含80000多个条目的CSV数据框。我有一个填充0和1的列(maj),一年中每天的列,以及每天价格(和其他列)的列。当maj = 1时,表示当天已完成价格更新。我想要做的是:如果在过去30天内maj = 0,价格必须被“N / A”取代

这是我的df示例:

      day       maj     price
   2019-01-02    1      1435
   2019-01-03    0      1435
   2019-01-04    0      1435
   2019-01-05    0      1435

例如,如果在2019-01-03和2019-02-03 maj = 0之间,我想要将2019-02-04及以下所有的价格替换为N / A,直到maj = 1为止。

我没有任何代码可以显示,因为当我看到没有任何工作时我删除了它。我尝试了rollapplyr与动物园包,它创建了一个函数和值来滚动每月总和,但我不明白。

有谁知道怎么做?

谢谢,

r if-statement count condition find-occurrences
1个回答
0
投票

使用DF在最后的Note中可重复使用rollapplyr如果在最后n天有任何1,则返回TRUE,否则返回FALSE。然后使用ifelse将TRUE转换为1,将FALSE转换为NA。问题没有说明如何处理前n-1个元素,但在下面我们用1填充它们。 (替代方案是fill=NApartial=TRUE,如果少于n,则最后一个替代方案将适用于任何数量的元素。

library(zoo)

# n <- 30
n <- 3

transform(DF, price = price * ifelse(rollapplyr(maj, n, any, fill = 1), 1, NA))

赠送:

         day maj price
1 2019-01-02   1  1435
2 2019-01-03   0  1435
3 2019-01-04   0  1435
4 2019-01-05   0    NA

注意

Lines <- "day       maj     price
2019-01-02    1      1435
2019-01-03    0      1435
2019-01-04    0      1435
2019-01-05    0      1435"
DF <- read.table(text = Lines, header = TRUE, strip.white = TRUE)
DF$day <- as.Date(DF$day)
© www.soinside.com 2019 - 2024. All rights reserved.