|
10 | 10 | #' @importFrom dplyr arrange bind_rows
|
11 | 11 | #'
|
12 | 12 | extend_soil_profile <- function(df, x_end) {
|
13 |
| - if(x_end > min(df$x)) { |
14 |
| - if(any(x_end == df$x)) { |
15 |
| - return(df[which(x_end <= df$x),]) |
| 13 | + if (x_end > min(df$x)) { |
| 14 | + if (any(x_end == df$x)) { |
| 15 | + return(df[which(x_end <= df$x), ]) |
16 | 16 | }
|
17 | 17 | } else {
|
| 18 | + # Original x-Abstand ermitteln |
| 19 | + x_diff <- mean(diff(df$x)) |
18 | 20 |
|
19 |
| - # Original x-Abstand ermitteln |
20 |
| - x_diff <- mean(diff(df$x)) |
| 21 | + # Neue x-Werte erstellen basierend auf dem vorgegebenen Endwert für x |
| 22 | + new_x <- seq(min(df$x), x_end, by = x_diff) |
21 | 23 |
|
22 |
| - # Neue x-Werte erstellen basierend auf dem vorgegebenen Endwert für x |
23 |
| - new_x <- seq(min(df$x), x_end, by = x_diff) |
| 24 | + # Anzahl der neuen x-Werte bestimmen |
| 25 | + num_new_rows <- length(new_x) |
24 | 26 |
|
25 |
| - # Anzahl der neuen x-Werte bestimmen |
26 |
| - num_new_rows <- length(new_x) |
| 27 | + # Letzte gültige Werte für die Spalten extrahieren |
| 28 | + last_vals <- sapply(df, tail, 1) |
27 | 29 |
|
28 |
| - # Dataframe mit neuen Werten erstellen |
29 |
| - new_df <- data.frame( |
30 |
| - x = new_x, |
31 |
| - node_id = max(df$node_id) + 1:num_new_rows |
32 |
| - ) |
| 30 | + # Dataframe mit neuen Werten erstellen |
| 31 | + new_df <- data.frame( |
| 32 | + x = new_x, |
| 33 | + node_id = max(df$node_id) + 1:num_new_rows |
| 34 | + ) |
33 | 35 |
|
34 |
| - # Spalten aus dem ursprünglichen DataFrame übernehmen (in der richtigen Reihenfolge) |
35 |
| - for (col in names(df)) { |
36 |
| - if (col %in% c("x", "node_id")) next # x und node_id überspringen |
37 |
| - new_df[[col]] <- rep(df[[col]], length.out = num_new_rows) |
38 |
| - } |
| 36 | + # Spalten aus dem ursprünglichen DataFrame übernehmen |
| 37 | + for (col in names(df)) { |
| 38 | + if (col %in% c("x", "node_id")) next # x und node_id überspringen |
| 39 | + new_df[[col]] <- rep(last_vals[[col]], num_new_rows) |
| 40 | + } |
| 41 | + |
| 42 | + # Kombinieren und Sortieren der Dataframes |
| 43 | + combined_df <- dplyr::bind_rows(df, new_df) |
| 44 | + sorted_df <- dplyr::arrange(combined_df, node_id) |
39 | 45 |
|
40 |
| - return(dplyr::bind_rows(df, new_df) %>% |
41 |
| - dplyr::arrange(node_id)) |
| 46 | + return(sorted_df) |
42 | 47 | }
|
43 | 48 | }
|
0 commit comments