R;数据框中的最大和最小天数

Posted

技术标签:

【中文标题】R;数据框中的最大和最小天数【英文标题】:R; The number of days maximum and minimum in a dataframe 【发布时间】:2020-05-24 20:56:13 【问题描述】:

我有数据框,我想有两个新列 nmaxa 和 nmina 显示列 a 最多多少天,另一列显示列 a 最少多少天。如果它不是最大值或最小值,则天数将为 0。最大值或最小值的回溯天数可能非常大。我试图在 R 中找到一个回溯函数来做到这一点,但我找不到。

 set.seed(123)
 days = 1:100
a = runif(100, 1, 100)


df <- data.frame(days,a)
head(df)
tail(df)

示例: 如果列 a 的值大于前 2 天但小于前 3 天,则返回值为 2。

如果列 a 的值小于前 3 天但大于前 4 天,则返回值为 3。

这是一个具体示例,但我需要它回溯到不再满足最大或最小条件(执行 while 条件循环)并返回最大值和最小值的天数。

我将不胜感激。

【问题讨论】:

谢谢。我已经编辑了这篇文章,以更清楚地说明我需要做什么。这是一个玩具示例,但最小值和最大值的可变回溯期可能非常大 你能检查一下这个逻辑head(df) %&gt;% mutate(a1 = lag(a, default = first(a)), a2 = lag(a, 2, default = first(a)), new = a &gt; a1 &amp; a &gt; a2 &amp; a &lt; lag(a, 3, default = first(a))) 或者它是rollapply的滚动函数 示例中是否需要b列? 对于上述具体示例,这是一个非常优雅的解决方案,但我需要它回溯到不再满足最大或最小条件。 【参考方案1】:

另一个data.table 选项使用带有mult= 参数的自联接:

df[, nmaxa :=  .SD[.SD, on=.(days<days, a>=a), mult="last", 
    i.days - fcoalesce(x.days, 0L) - 1L]
]

df[, nmina := .SD[.SD, on=.(days<days, a<=a), mult="last", 
    i.days - fcoalesce(x.days, 0L) - 1L]
]

head(df, 18L)的输出:

     days         a nmaxa nmina
  1:    1 29.470174     0     0
  2:    2 79.042208     1     0
  3:    3 41.488715     0     1
  4:    4 88.418723     3     0
  5:    5 94.106261     4     0
  6:    6  5.510093     0     5
  7:    7 53.282443     1     0
  8:    8 89.349485     2     0
  9:    9 55.592066     0     1
 10:   10 46.204859     0     3
 11:   11 95.726501    10     0
 12:   12 45.880081     0     5
 13:   13 68.079493     1     0
 14:   14 57.690707     0     1
 15:   15 11.189544     0     8
 16:   16 90.082672     4     0
 17:   17 25.362686     0     1
 18:   18  5.163894     0    17

【讨论】:

【参考方案2】:

这可能行得通

library(data.table)
setDT(df)[, Max := (Reduce(`&`, lapply(shift(a, n = 1:2, 
   fill = first(a)), `<`, a)) & a < shift(a, n = 3, fill = first(a))) * 2]
df[, Min := (Reduce(`&`, lapply(shift(a, n = 1:3, 
   fill = first(a)), `>`, a)) & a > shift(a, n = 4, fill = first(a))) * 3]

【讨论】:

@MacOS 除shift 部分外,其他所有功能均来自base R。因此,使用embed 更容易构建班次

以上是关于R;数据框中的最大和最小天数的主要内容,如果未能解决你的问题,请参考以下文章

用于创建具有数据框中每个日期的最小值和最大值的表的函数

遍历火花数据框中的列并计算最小值最大值

如何根据条件选择R数据框中的连续行?

从数据框中提取具有最小值或最大值的行

从熊猫数据框中获取最小和最大日期

在包含整数和字符串的混合数据框中查找最小/最大值