R присоединиться к Tolower - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть пример данных

data1 = data.frame(name = c("cat", "dog", "parrot"), freq = c(1,2,3))
data2 = data.frame(name = c("Cat", "snake", "Dog", freq2 = c(2,3,4)))
data1$name = as.character(data1$name)
data2$name = as.character(data2$name)

к которому я хочу присоединиться, но, например, «кошка» и «кошка» должны рассматриваться как одно и то же значение. Я подумал об использовании tolower и сначала определил записи, которые появляются в обоих фреймах данных, по

in_both = data1[(tolower(data1$name) %in% tolower(data2$name)),]

Затем я хочу присоединиться к data2, но это не работает, потому что имена не совпадают.

library(dplyr)
left_join(in_both, data2)

Есть ли способ присоединиться, используя tolower?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Если вы не хотите изменять свой исходный data2, как предлагает @AshofFire, вы можете декапитализировать значения в name в канале %>% и затем выполнить операцию соединения:

data2 %>%
  mutate(name = str_to_lower(name)) %>%
  inner_join(data1, by = "name") 

  name freq2 freq
1  cat     2    1
2  dog     4    2
0 голосов
/ 26 апреля 2018

Почему бы не создать функцию dplyr, которая бы опускала имя слева data.frame и выполняла слияние.

С пользовательской функцией вы получаете больше контроля, и вам не нужно будет повторять много шагов.

f_dplyr <- function(left,right){
  left$name <- tolower(left$name)
  inner_join(left,right,by="name")
}

f_dplyr(data2, data1)

Результат

  name freq2 freq
  cat     2    1
  dog     4    2
...