如何根据R中的某个阈值对值进行分类?

如何根据R中的某个阈值对值进行分类?,r,dataframe,if-statement,tidyverse,R,Dataframe,If Statement,Tidyverse,我有D数据框,它有站的值。我确实有另一个数据。帧F具有特定条件下的站阈值(即WBN、AN等)。我想使用D中每个站点的值来查看它在F的哪些条件下,并保存D数据。frame在DF中为条件添加了一列。这是我的示例代码 library(tidyverse) set.seed(123) D <- data.frame(Stations = c("A","S","D","Z"), Value = c(15,10,25,1

我有
D
数据框
,它有
站的值
。我确实有另一个
数据。帧
F
具有特定条件下的
阈值
(即WBN、AN等)
。我想使用
D
中每个
站点的值来查看它在
F
的哪些条件下,并保存
D
数据。fram
e在
DF
中为
条件添加了一列。这是我的示例代码

library(tidyverse)

set.seed(123)
D <- data.frame(Stations = c("A","S","D","Z"), Value = c(15,10,25,16))
F <- data.frame(Stations = c("A","S","D","Z"), WBN = runif(4, 0, 3), BN = runif(4, 3,6),
                N = runif(4,7,10), AN = runif(4,15,25))

我的目标是在
Max_2020
中添加另一列,并根据
值位于
Freq
的条件进行填写。换句话说,例如,如果
Max_2020
中的
小于
Freq
1:2
列下的数字,我会将
1:2
分配给特定电台的
Max_2020
中的新列。对于特定的
站点
,需要在
Freq
的所有列中检查
Max\u 2020
中的值,然后分配其各自的条件。

您可以获得长格式的
F
,通过
站点将其与
D
连接,对于每个
站点
保留
交叉的行

library(dplyr)

Freq %>%
  pivot_longer(cols = -Stations) %>%
  mutate(value = as.numeric(value)) %>%
  left_join(Max_2020, by = 'Stations') %>%
  group_by(Stations) %>% 
  slice(which(value > Value)[1] - 1) %>%
  select(Stations, name) %>%
  right_join(Max_2020, by = 'Stations')

你能再检查一下你想要的输出吗?应该
条件
其中
站==D
eq
NA
?哇-你的代码不见了,但我在实际数据上使用你的代码得到了非常奇怪的结果。它为
站吐出
NA
,我对这些站有价值和
条件。此外,根据
D
中的
Value
条件
错误地分配给
站点
。我得到变量
D
NA
而不是一个特定条件。此外,当我将您的代码应用于实际数据时,我看到,在<代码> f>代码>中,每个代码< >代码>站点重复,我宁愿有一个条件:基于代码> d>代码>代码>值>代码>您想考虑每个代码>站点< /代码>。我正在选择条件(
value>value
)。对于
D
而言,
F
中没有大于
D
中值的值,因此它返回
NA
。您好@Ronak,我刚刚用实际数据的输出更新了问题。frame。不确定,如何在这里清楚地描述我的观点:(.首先,您在
Freq
中有类字符列,因此任何类型的数学运算都无法对其进行运算。我们需要将其转换为数字。站点
05EG004
的预期输出是什么?站点
05EG004
的输出应为
1:5
,因为其值为
9.18
,且t较低han
1:10
但大于
1:2
> head(Freq, 5)
# A tibble: 5 x 9
  Stations `1:2` `1:5`              `1:10` `1:25` `1:50` `1:100`            `1:200`            `1:500`
  <chr>    <chr> <chr>              <chr>  <chr>  <chr>  <chr>              <chr>              <chr>  
1 05EF001  911   1550               2180   3350   4410   5860               7730               11100  
2 05EG004  2.7   6.6                11     18     24     33                 43                 60     
3 05FF003  7.24  35.409999999999997 63.26  100.17 124.95 145.86000000000001 162.72999999999999 179.29 
4 05GC006  12.44 38.85              63.11  98.12  125.51 152.86000000000001 179.63             213.48 
5 05GD002  1.38  4.03               6.33   9.65   12.33  15.14              20.170000000000002 29.56  

> head(Max_2020, 5)
# A tibble: 5 x 2
  Stations Value
  <chr>    <dbl>
1 05EG004   9.18
2 05FF003  38.7 
3 05GC006  15.8 
4 05GD002   2.65
5 05GF002  57.2 
library(dplyr)

Freq %>%
  pivot_longer(cols = -Stations) %>%
  mutate(value = as.numeric(value)) %>%
  left_join(Max_2020, by = 'Stations') %>%
  group_by(Stations) %>% 
  slice(which(value > Value)[1] - 1) %>%
  select(Stations, name) %>%
  right_join(Max_2020, by = 'Stations')