Пользовательская функция не работает в mutate dplyr - PullRequest
0 голосов
/ 27 января 2020

Привет, у меня есть такие данные сопоставления

mapDATA:

no    definition
0     group1
7     group2
12    group3

и основные данные вот так

mainDATA:

id no
A  0
B  8
C  12

ожидаемые данные


id  no  definition
A   0   group1
B   8   group2
C   12  group3

я пытаюсь создать функцию и использовать это в пределах mutate

getDefinition <- function(no_n, df){
 for(i in 1:nrow(df)) {
  no <- as.double(df[i,1])
  if(no < no_n | no == no_n) {
   def <- as.character(df[i,2])
  } else {
   break
  }
 }
 return(def)

}

mainDATA <- mainDATA %>%
 mutate(definition = getDefinition(no, mapDATA))

warning
the condition has length > 1 and only the first element will be used

делает результат Definiton одинаковым. Как это исправить?

1 Ответ

2 голосов
/ 27 января 2020

Мы можем использовать cut / findInterval

mainDATA$definition <- cut(mainDATA$no, c(mapdata$no,Inf), 
                           labels = mapdata$definition, right = FALSE)

mainDATA
#  id no definition
#1  A  0     group1
#2  B  8     group2
#3  C 12     group3

С findInterval

mainDATA$definition <- mapdata$definition[findInterval(mainDATA$no, mapdata$no)]
...