Присоединяйтесь к кадрам данных R и повторяйте значения - PullRequest
0 голосов
/ 27 мая 2020

Я хочу объединить два набора данных и добавить новый вектор со значениями во все строки. Наборы данных содержат разное количество строк, и там, где некоторые значения в разных строках не совпадают, я все же хочу, чтобы было добавлено значение нового вектора.

df1 <- data.frame(
  material = c("D", "D", "D", "A", "A", "A"),
  RH = c(85, 90, 95, 80, 85, 90),
  f = c(NA, NA, 92, 23, 14, 7)
)
df2 <- data.frame(
  material = c("D", "A"),
  RH = c(95, 80),
  f = c(92, 23),
  p3 = c(12, 32)
)

, и это то, что я хочу результат будет

wanted <- data.frame(
  material = c("D", "D", "D", "A", "A", "A"),
  RH = c(85, 90, 95, 80, 85, 90),
  f = c(NA, NA, 92, 23, 14, 7),
  p3 = c(12, 12, 12, 32, 32, 32)
)

Я пробовал разные варианты «соединения», например left_join(df1,df2), но это не дает желаемого результата

1 Ответ

0 голосов
/ 27 мая 2020

Один из способов сделать это - использовать функцию left_join() из пакета dplyr .

Я разделяю фрейм данных df2 так, чтобы он содержал только столбец, соответствующий один из df1 (material) и тот, который вы хотите добавить (p3).

library(dplyr)

df1 <- data.frame(
  material = c("D", "D", "D", "A", "A", "A"),
  RH = c(85, 90, 95, 80, 85, 90),
  f = c(NA, NA, 92, 23, 14, 7)
)
df2 <- data.frame(
  material = c("D", "A"),
  RH = c(95, 80),
  f = c(92, 23),
  p3 = c(12, 32)
)
wanted <- data.frame(
  material = c("D", "D", "D", "A", "A", "A"),
  RH = c(85, 90, 95, 80, 85, 90),
  f = c(NA, NA, 92, 23, 14, 7),
  p3 = c(12, 12, 12, 32, 32, 32)
)

# Subset df2 to keep only material and p3 columns,
# makes joining more straightforward
df2_selected <- select(df2, material, p3)

result <- left_join(df1, df2_selected, by = "material")
result
#>   material RH  f p3
#> 1        D 85 NA 12
#> 2        D 90 NA 12
#> 3        D 95 92 12
#> 4        A 80 23 32
#> 5        A 85 14 32
#> 6        A 90  7 32

identical(wanted, result)
#> [1] TRUE

Примечание: этот подход предполагает, что столбец p3 в df2 зависит только на material. Вы также можете объединить несколько столбцов, изменив аргумент by = для left_join(). Подробнее см. Документацию .

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