Лучший способ взаимодействовать с приложением Командной строки

Данные

Прежде всего, я добавил stringsAsFactors = FALSE к вашим входным фреймам данных, потому что в моем решении проще работать со строками, чем с факторами.

df1 <- data.frame(group = rep("A", 5),
              name = c("Brandon",
                       "Kyler",
                       "Trent",
                       "Lesa",
                       "Michael"),
              gender = c("M", "F", "M", "F", "M"),
              days = c(50, 45, 32, 60, 48),
              stringsAsFactors = FALSE)

df2 <- data.frame(group = rep("B", 10),
                  name = c("Erica", 
                           "Jared",
                           "Sara",
                           "Helen",
                           "Tom",
                           "Ron",
                           "Cy",
                           "Lynn",
                           "Ken",
                           "Judy"),
                  gender = c("F", "M", "F", "F", "M", "M", "M", "F", "M", "F"),
                  days = c(47, 49, 62, 80, 74, 30, 55, 58, 63, 25),
                  stringsAsFactors = FALSE)

Решение

library(tidyverse)

# empty dataframe for the output
df2_new <- data.frame(group = character(),
                      name = character(),
                      gender = character(),
                      days = numeric(),
                      stringsAsFactors = FALSE)

for(i in 1:nrow(df1)){

  # add the row of interest to the output dataframe
  df2_new[i,] <- df2 %>% 
    mutate(day_diff = abs(days - df1$days[i])) %>%
    filter(gender == df1$gender[i]) %>% 
    slice(which.min(day_diff)) %>%
    select(-day_diff)

  # remove the newly added row from the original dataset
  df2 <- df2 %>%
    filter(!(name %in% df2_new$name))

}

Это первое решение, которое пришло в голову. В этом случае строки удаляются из df2 по мере продолжения цикла for, поскольку вы сказали, что

хотите отфильтровать df2, чтобы включить только самое близкое соответствие каждой строке в [ 116]

Вывод

df2_new

  group  name gender days
1     B Jared      M   49
2     B Erica      F   47
3     B   Ron      M   30
4     B  Sara      F   62
5     B    Cy      M   55

В моем случае код выбирал Сару вместо Линн, но это выбор 50/50.

6
задан NoizWaves 14 January 2009 в 11:47
поделиться

2 ответа

Необходимо было бы перенаправить обоих входные и выходные потоки, с помощью Process; это - немного более хитрая обработка обоих, так как необходимо быть осторожными, что вещи не потеряны в буферах (порождение мертвой блокировки).

Вы могли бы также хотеть посмотреть на OutputDataReceived для основанных на событии ответов.

15
ответ дан 8 December 2019 в 14:48
поделиться

Если все приложения разрабатываются в dotnet, можно использовать класс блока

1
ответ дан 8 December 2019 в 14:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: