我需要创建一个新列,告诉我在给定日期开始的进程是否遇到了零度以下的温度.我想遍历数据帧的每一行,判断一组从当前行开始并包含下一个x行数的行,其中x是"duration"列中的值.如果该行组中的任何临时值低于零,则新列中的值将为TRUE.

set.seed(1)
df = data.frame(date = seq(as.Date("2020-01-01"),as.Date("2020-04-09"), by=1),
                    temp = runif(100,min=-2,max=30),
                    duration = sample.int(20,100,replace=TRUE))

> head(df, n=10)
         date        temp duration
1  2020-01-01  6.49627722       12
2  2020-01-02  9.90796479       16
3  2020-01-03 16.33130763        1
4  2020-01-04 27.06264928       13
5  2020-01-05  4.45382179        6
6  2020-01-06 26.74846992       17
7  2020-01-07 28.22960860        9
8  2020-01-08 19.14552936        7
9  2020-01-09 18.13164940       19
10 2020-01-10 -0.02283935       18

对于每一行,我都试图回答这样一个问题:"从这个日期开始并持续了[持续时间]天的过程是否遇到了零度以下的温度?"由于第一行中"duration"的值是12,而"temp"列的第十行中有一个负数,因此新列的值将为TRUE.第二行也是TRUE,第三行是FALSE,接下来的六行是TRUE.

我一直在玩purrr的map\u lgl函数,但我什么都没做.

推荐答案

您可以使用zoo::rollapply,它在datawidth中都是矢量化的.

library(zoo)
df %>%
    mutate(answer = rollapply(
        temp, 
        width = duration, 
        FUN = function(x) any(x < 0), 
        align = "left", 
        fill = NA))
#          date        temp duration answer
#1   2020-01-01  6.49627722       12   TRUE
#2   2020-01-02  9.90796479       16   TRUE
#3   2020-01-03 16.33130763        1  FALSE
#4   2020-01-04 27.06264928       13   TRUE
#5   2020-01-05  4.45382179        6   TRUE
#6   2020-01-06 26.74846992       17   TRUE
#7   2020-01-07 28.22960860        9   TRUE

R相关问答推荐

R箱形图gplot 2 4组但6个参数

警告:lmdif:info = 0. nls. lm()函数的输入参数不正确

根据现有列的名称和字符串的存在进行变异以创建多个新列

线性模型斜率在减少原始数据时提供NA

使用带有OR条件的grepl过滤字符串

使用范围和单个数字将数字与字符串进行比较

用R ggplot2求上、下三角形中两个变量的矩阵热图

为什么这个表格格罗布不打印?

我是否可以使用多个变异项来构建顺序列(标记多个问题)

如何删除设置大小的曲线图并添加条形图顶部数字的百分比

如何筛选截止年份之前最后一个测量年度的所有观测值以及截止年份之后所有年份的所有观测值

如何在使用因子时获得Sankey图的Scale_Fill_Viridis的全范围

通过比较来自多个数据框的值和R中的条件来添加新列

R:改进实现简单模型

Package emMeans:如果emmip模型中包含的变量较少,emMeans模型中的其他变量设置为什么?

如果y中存在x中的值,则将y行中的多个值复制到相应的x行中

只有当我在循环的末尾放置一条print语句时,Foreach才会给出预期的输出

在R中,如果一个值在同一数据帧中的任何特定列中,如何计算?

在R中的Sankey图表中添加标题

如何使用str_Detect计算并返回列表中检测到的字符串?