1.Загрузите ваши данные
df1 <- read.table(text = ' MKZ Elbekilometer MNW91-2010 Fix Pegel Distanz_Pegel_m
1 43420072 178.2 70.70 70.37300 Torgau 18816.2011
2 43435074 172.0 72.09 71.81900 Torgau 11926.9932
3 43435084 177.0 70.93 70.61100 Torgau 15620.9210
4 43435086 171.8 72.14 71.87100 Torgau 11478.2310
5 44425470 172.2 72.05 71.76767 Torgau 17400.7983
6 44425476 172.2 72.05 71.76767 Torgau 14448.9073
7 45426142 154.0 75.91 75.72300 Torgau 21065.9449
8 45440655 125.4 84.18 83.94567 Riesa 17019.6066
9 46431146 117.0 87.17 87.04500 Riesa 23594.2523
10 46440130 116.0 87.45 87.32600 Riesa 10471.5078')
df2 <- read.table(text = ' Schöna Pirna Dresden Meißen Riesa Torgau
1980-01-01 119.583 110.576 105.742 98.522 92.036 79.038
1980-01-02 119.523 111.426 105.652 98.412 91.926 78.908
1980-01-03 119.413 111.316 105.592 98.362 91.876 78.848
1980-01-04 119.123 111.126 105.382 98.222 91.756 78.748
1980-01-05 119.103 110.956 105.282 98.032 91.536 78.488
1980-01-06 118.823 110.786 105.062 97.802 91.396 78.348
1980-01-07 118.783 110.726 104.972 97.722 91.276 78.128
1980-01-08 118.923 110.866 105.102 97.852 91.336 78.088')
Сначала мы отформатируем второй фрейм данных, чтобы мы могли легко присоединиться к нему, используя left_join
из dplyr.Затем мы фильтруем первый кадр данных на указанном вами MKZ (43420072
) и объединяем данные:
2.Отформатируйте второй кадр данных (df2
) так, чтобы мы могли легко присоединиться к нему
library(dplyr)
library(tidyr)
library(tibble)
df2.new <- df2 %>%
rownames_to_column('date') %>%
gather('Pegel','value', -date)
3.Создайте новый фрейм данных
# We pick the correct data from the first dataframe
df1 <- df1 %>% filter(MKZ == 43420072)
# Build the new df
new.df <- df2.new %>%
left_join(df1) %>%
select(date, Pegel, value, `MNW91.2010`) %>%
mutate(new.col = value + `MNW91.2010`)
Вывод
Этот новый фрейм данных будет выглядеть так, как вы описали (отфильтровано по Плегелю == Торгау):
date Pegel value MNW91.2010 new.col
1 1980-01-01 Torgau 79.038 70.7 149.738
2 1980-01-02 Torgau 78.908 70.7 149.608
3 1980-01-03 Torgau 78.848 70.7 149.548
4 1980-01-04 Torgau 78.748 70.7 149.448
5 1980-01-05 Torgau 78.488 70.7 149.188
6 1980-01-06 Torgau 78.348 70.7 149.048
7 1980-01-07 Torgau 78.128 70.7 148.828
8 1980-01-08 Torgau 78.088 70.7 148.788
РЕДАКТИРОВАТЬ
Вывод без фильтрации для MKZ
new.df <- df2.new %>%
left_join(df1) %>% #WITHOUT running df1 %>% filter(MKZ == 43420072)
select(date, Pegel, value, MKZ, `MNW91.2010`) %>% #Added MKZ as column for clarity
mutate(new.col = value + `MNW91.2010`)
Создает следующий кадр данных для Torgau
:
date Pegel value MKZ MNW91.2010 new.col
1 1980-01-01 Torgau 79.038 43420072 70.70 149.738
2 1980-01-01 Torgau 79.038 43435074 72.09 151.128
3 1980-01-01 Torgau 79.038 43435084 70.93 149.968
4 1980-01-01 Torgau 79.038 43435086 72.14 151.178
5 1980-01-01 Torgau 79.038 44425470 72.05 151.088
6 1980-01-01 Torgau 79.038 44425476 72.05 151.088
7 1980-01-01 Torgau 79.038 45426142 75.91 154.948
8 1980-01-02 Torgau 78.908 43420072 70.70 149.608
9 1980-01-02 Torgau 78.908 43435074 72.09 150.998
10 1980-01-02 Torgau 78.908 43435084 70.93 149.838
11 1980-01-02 Torgau 78.908 43435086 72.14 151.048
12 1980-01-02 Torgau 78.908 44425470 72.05 150.958
13 1980-01-02 Torgau 78.908 44425476 72.05 150.958
14 1980-01-02 Torgau 78.908 45426142 75.91 154.818
15 1980-01-03 Torgau 78.848 43420072 70.70 149.548
16 1980-01-03 Torgau 78.848 43435074 72.09 150.938
17 1980-01-03 Torgau 78.848 43435084 70.93 149.778
18 1980-01-03 Torgau 78.848 43435086 72.14 150.988
19 1980-01-03 Torgau 78.848 44425470 72.05 150.898
20 1980-01-03 Torgau 78.848 44425476 72.05 150.898
21 1980-01-03 Torgau 78.848 45426142 75.91 154.758
22 1980-01-04 Torgau 78.748 43420072 70.70 149.448
23 1980-01-04 Torgau 78.748 43435074 72.09 150.838
24 1980-01-04 Torgau 78.748 43435084 70.93 149.678
25 1980-01-04 Torgau 78.748 43435086 72.14 150.888
26 1980-01-04 Torgau 78.748 44425470 72.05 150.798
27 1980-01-04 Torgau 78.748 44425476 72.05 150.798
28 1980-01-04 Torgau 78.748 45426142 75.91 154.658
29 1980-01-05 Torgau 78.488 43420072 70.70 149.188
30 1980-01-05 Torgau 78.488 43435074 72.09 150.578
31 1980-01-05 Torgau 78.488 43435084 70.93 149.418
32 1980-01-05 Torgau 78.488 43435086 72.14 150.628
33 1980-01-05 Torgau 78.488 44425470 72.05 150.538
34 1980-01-05 Torgau 78.488 44425476 72.05 150.538
35 1980-01-05 Torgau 78.488 45426142 75.91 154.398
36 1980-01-06 Torgau 78.348 43420072 70.70 149.048
37 1980-01-06 Torgau 78.348 43435074 72.09 150.438
38 1980-01-06 Torgau 78.348 43435084 70.93 149.278
39 1980-01-06 Torgau 78.348 43435086 72.14 150.488
40 1980-01-06 Torgau 78.348 44425470 72.05 150.398
41 1980-01-06 Torgau 78.348 44425476 72.05 150.398
42 1980-01-06 Torgau 78.348 45426142 75.91 154.258
43 1980-01-07 Torgau 78.128 43420072 70.70 148.828
44 1980-01-07 Torgau 78.128 43435074 72.09 150.218
45 1980-01-07 Torgau 78.128 43435084 70.93 149.058
46 1980-01-07 Torgau 78.128 43435086 72.14 150.268
47 1980-01-07 Torgau 78.128 44425470 72.05 150.178
48 1980-01-07 Torgau 78.128 44425476 72.05 150.178
49 1980-01-07 Torgau 78.128 45426142 75.91 154.038
50 1980-01-08 Torgau 78.088 43420072 70.70 148.788
51 1980-01-08 Torgau 78.088 43435074 72.09 150.178
52 1980-01-08 Torgau 78.088 43435084 70.93 149.018
53 1980-01-08 Torgau 78.088 43435086 72.14 150.228
54 1980-01-08 Torgau 78.088 44425470 72.05 150.138
55 1980-01-08 Torgau 78.088 44425476 72.05 150.138
56 1980-01-08 Torgau 78.088 45426142 75.91 153.998
Редактировать, чтобы записать данные в файлы
Я предполагаю, что запись можно сделать проще, например:
write.mkz = function(df, workspace) {
write.csv(df,paste0(workspace,'/',unique(df$MKZ),".csv"), row.names = F)
return(df)
}
workspace = ...
new.df %>%
group_by(MKZ) %>%
do(write.mkz(., workspace))