Как назначить значения из разных фреймов данных по нескольким критериям, используя R - PullRequest
0 голосов
/ 12 июня 2019

У меня есть фрейм данных под названием «данные», в котором есть столбцы «дата, месяц, расход и станция». Другой фрейм данных с именем perc содержит столбцы month, W1_Percentile и B1_Percentile. W1_Percentile и B1_Percentile - месячные значения процентиля для каждой из точек замера. Я хочу, чтобы в моем конечном выводе столбцы были такими же, как в df (data), с дополнительным столбцом для «Percentile», который будет иметь значения процентиля для соответствующего месяца и измерительной станции (значения процентиля каждой измерительной станции для соответствующих месяцев хранятся в DF (перхлорэтилен)). Какие шаги я должен следовать?

Вот пример входных данных:

date <- as.Date(c('1950-03-12','1954-03-23','1991-06-27','1997-09-04','1991-06-27','1987-05-06','1987-05-29','1856-07-08','1993-06-04', '2001-09-19','2001-05-06','2001-05-27'))
month <- c('Mar','Mar','Jun','Sep','Jun','May','May','Jul','Jun','Sep','May','May')
disch <- c(125,1535,1654,154,4654,453,1654,145,423,433,438,6426)
station <- c('W1','W1','W1','W1','W1','W1','B1','B1','B1','B1','B1','B1')
data <- data.frame("Date"= date, "Month" = month,"Discharge"=disch,"station"=station)

      Date Month Discharge station
1  1950-03-12   Mar       125      W1
2  1954-03-23   Mar      1535      W1
3  1991-06-27   Jun      1654      W1
4  1997-09-04   Sep       154      W1
5  1991-06-27   Jun      4654      W1
6  1987-05-06   May       453      W1
7  1987-05-29   May      1654      B1
8  1856-07-08   Jul       145      B1
9  1993-06-04   Jun       423      B1
10 2001-09-19   Sep       433      B1
11 2001-05-06   May       438      B1
12 2001-05-27   May      6426      B1

Month <- c('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')
W1 <- c(106,313,531.40,164.10,40,23.39,18.30,24,16,16,12,34)
B1 <- c(1330,1550,1948,1880,1260,853.15,680.15,486.10,503,625,738,1070)
perc <- data.frame("Month"=Month,"W1_Percentile"=W1,"B1_Percentile"=B1)

 Month W1_Percentile B1_Percentile
1    Jan        106.00       1330.00
2    Feb        313.00       1550.00
3    Mar        531.40       1948.00
4    Apr        164.10       1880.00
5    May         40.00       1260.00
6    Jun         23.39        853.15
7    Jul         18.30        680.15
8    Aug         24.00        486.10
9    Sep         16.00        503.00
10   Oct         16.00        625.00
11   Nov         12.00        738.00
12   Dec         34.00       1070.00

Вот как я хочу, чтобы конечный результат выглядел следующим образом:

         Date Month Discharge station Percentile
1  1950-03-12   Mar       125      W1     531.40
2  1954-03-23   Mar      1535      W1     531.40
3  1991-06-27   Jun      1654      W1      23.39
4  1997-09-04   Sep       154      W1      16.00
5  1991-06-27   Jun      4654      W1      23.39
6  1987-05-06   May       453      W1      40.00
7  1987-05-29   May      1654      B1    1260.00
8  1856-07-08   Jul       145      B1     680.15
9  1993-06-04   Jun       423      B1     853.15
10 2001-09-19   Sep       433      B1     503.00
11 2001-05-06   May       438      B1    1260.00
12 2001-05-27   May      6426      B1    1260.00

1 Ответ

0 голосов
/ 12 июня 2019

Нам нужно сначала преобразовать ваши perc данные в длинный формат, чтобы у нас были столбцы, которые мы хотим добавить к data, а затем это простое объединение:

library(tidyr)
library(dplyr)

# make the column names the same as the values in data
names(perc)[2:3] = c("W1", "B1")
# convert to long format
perc_long = gather(perc, key = "station", value = "percentile", W1, B1)

# join
left_join(data, perc_long)
# Joining, by = c("Month", "station")
#          Date Month Discharge station percentile
# 1  1950-03-12   Mar       125      W1     531.40
# 2  1954-03-23   Mar      1535      W1     531.40
# 3  1991-06-27   Jun      1654      W1      23.39
# 4  1997-09-04   Sep       154      W1      16.00
# 5  1991-06-27   Jun      4654      W1      23.39
# 6  1987-05-06   May       453      W1      40.00
# 7  1987-05-29   May      1654      B1    1260.00
# 8  1856-07-08   Jul       145      B1     680.15
# 9  1993-06-04   Jun       423      B1     853.15
# 10 2001-09-19   Sep       433      B1     503.00
# 11 2001-05-06   May       438      B1    1260.00
# 12 2001-05-27   May      6426      B1    1260.00

Существует многоспособы выполнения этих операций, по сути, это комбинация двух R-FAQ.Для получения дополнительной информации см.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...