【问题标题】:Check for nearest value in a column检查列中最接近的值
【发布时间】:2018-12-18 12:54:13
【问题描述】:

有没有办法检查向量/列中的哪个值最接近给定值?

例如,我有一列包含天数: 天数:50、49、59、180、170、199、200

我想在数据框中创建一个新列,每次天数列的值为 183 或接近 183 时标记一个 X

应该是这样的:

DAYS         new column
0            
12
12
14
133
140           X
0
12
14
15
178 
183           X
0
15
30
72
172           X

希望你能帮助我!

【问题讨论】:

  • 你的意思是每个数据块中用零分隔的最接近的值吗?
  • 接近 183?多近?
  • 是的。每个数据块内的 closets 值,以零分隔。所以最接近半年的天数(182/183 天)

标签: r dataframe multiple-columns dplyr


【解决方案1】:

本质上,您正在搜索局部最大值。首先将数据标准化为目标,即 183,然后搜索最接近零的值。这些是你的局部最大值。我添加了值大于您的目标的数据来演示。

df <- data.frame(DAYS = c(0,12,12,14,133,140,0,12,14,15,178,183,184,190,0,15,30,72,172,172.5))
df$localmin <- abs(df$DAYS - 183)
df

> df
    DAYS localmin
1    0.0    183.0
2   12.0    171.0
3   12.0    171.0
4   14.0    169.0
5  133.0     50.0
6  140.0     43.0
7    0.0    183.0
8   12.0    171.0
9   14.0    169.0
10  15.0    168.0
11 178.0      5.0
12 183.0      0.0
13 184.0      1.0
14 190.0      7.0
15   0.0    183.0
16  15.0    168.0
17  30.0    153.0
18  72.0    111.0
19 172.0     11.0
20 172.5     10.5


targets <- which(diff(sign(diff(c(df$localmin, 183)))) == 2) + 1L
df$targets <- 0
df$targets[targets] <- 1
df

> df
    DAYS localmin targets
1    0.0    183.0       0
2   12.0    171.0       0
3   12.0    171.0       0
4   14.0    169.0       0
5  133.0     50.0       0
6  140.0     43.0       1
7    0.0    183.0       0
8   12.0    171.0       0
9   14.0    169.0       0
10  15.0    168.0       0
11 178.0      5.0       0
12 183.0      0.0       1
13 184.0      1.0       0
14 190.0      7.0       0
15   0.0    183.0       0
16  15.0    168.0       0
17  30.0    153.0       0
18  72.0    111.0       0
19 172.0     11.0       0
20 172.5     10.5       1

【讨论】:

  • 这个我试过了,但是它不是每半年标记一次还是关闭?
  • 如果我有约会怎么办?所以我有日期而不是 DAYS 列:(“2015-02-10”)。我喜欢创建一个新列来标记日期之间的时间是 1 年?您可以在这里使用相同的方法吗?以及如何?
  • 它是什么标记,你的数据是什么格式的?如果您有日期,则可以转换为一年中的某一天。 1年之间什么日期?您应该编辑您的问题以提出您的问题,或者打开一个新问题。还有make it reproducible,尤其是如果您的数据不是您在此处发布的格式。
猜你喜欢
  • 2023-03-06
  • 2021-11-20
  • 2015-07-26
  • 2020-02-13
  • 1970-01-01
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多