我有一个D
Data.frame
,它具有Stations
的值。我确实有另一个data.frame
F
,它对于某些条件(Ie., WBN, AN etc)
具有Stations
阈值。我想使用D
中每个Stations
的值来查看它在哪些条件下属于F
,并保存D
data.fram
e,为DF
中的Conditions
添加一列。这是我的样本代码
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))
所需输出我应该得到一个类似的数据帧
DF <- D %>% mutate(Condition = c("AN", "AN", "AN", "AN" ))
来自我的实际数据的样本。帧数据。在上面的示例中,帧Freq
可以被认为是F
,而Max_2020
可以被认为为D
。
> 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
我的目标是在Max_2020
中添加另一列,并根据Value
位于Freq
中的条件进行填充。换句话说,例如,如果Max_2020
中的Value
小于Freq
中的列1:2
下的数字,则我将为特定站将1:2
分配给Max_2020
中的新列。对于特定的stations
,需要在Freq
中的所有列中检查Max_2020
中的值,然后为其分配相应的条件。
您可以获得长格式的F
,通过Stations
将其与D
连接,并为每个Stations
保留Value
交叉的行。
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')