如何根据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
eqNA
?哇-你的代码不见了,但我在实际数据上使用你的代码得到了非常奇怪的结果。它为站吐出NA
,我对这些站有价值和条件。此外,根据D
中的Value
将条件
错误地分配给站点
。我得到变量D
的NA
而不是一个特定条件。此外,当我将您的代码应用于实际数据时,我看到,在<代码> f>代码>中,每个代码< >代码>站点重复,我宁愿有一个条件:基于代码> d>代码>代码>值>代码>您想考虑每个代码>站点< /代码>。我正在选择条件(value>value
)。对于D
而言,F
中没有大于D
中值的值,因此它返回NA
。您好@Ronak,我刚刚用实际数据的输出更新了问题。frame。不确定,如何在这里清楚地描述我的观点:(.首先,您在Freq
中有类字符列,因此任何类型的数学运算都无法对其进行运算。我们需要将其转换为数字。站点05EG004
的预期输出是什么?站点05EG004
的输出应为1:5
,因为其值为9.18
,且t较低han1: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')