R поиск совпадений в столбце - PullRequest
0 голосов
/ 17 октября 2019

У меня есть фрейм данных, который имеет один столбец, он имеет почти 20,0000 df1%>% значений c (10,20,30,50)

, и у меня есть другой фрейм данных, который имеет несколькостолбцы один из этих столбцов также значения. df2%>% id c (24782,18741,17041,10471401) значений c (70,90,10,20,50) и других столбцов здесь, и эти данные устанавливают 50,00000 из 13 переменных. Я хочу видеть, если столбец значений в df1% в% в значениях df2, и поместить его в новый столбец в новом фрейме данных.

df3 <- df2%>% mutate (newvalue = ifelse (df1 $значения% в% df2 $ values, 1,0))

Ошибка: столбец ... должен иметь длину ... (количество строк) или один, а не ...

1 Ответ

0 голосов
/ 17 октября 2019

Две проблемы.

  1. Учитывая, что вы изменяете df2, ваш заказ неправильный. df1$values %in% df2$values сообщает вам, для каждого элемента df1$values, находится ли он в df2. Таким образом, результат равен df1, а не df2. Не имеет смысла помещать эту информацию в df2, потому что это результат около df1. Вам нужно либо добавить столбец к df1, либо переключить порядок и использовать df2$values %in% df1$values (думаю, это то, что вам нужно).

  2. dplyr функции ожидаемого столбца без кавычекимена аргумента фрейма данных. Итак, если вы перенаправляете df2 в mutate, вы не используете df2$ внутри этого mutate.

Делая оба эти исправления,Вы получите

df3 <- df2 %>% mutate(newvalue = ifelse(values %in% df1$values,1,0))

В качестве дополнительного совета %in% возвращает логический (ИСТИНА / ЛОЖЬ) результат. Вам не нужно ifelse, чтобы преобразовать это в 1/0, более эффективно использовать as.integer для того же результата.

df3 <- df2 %>% mutate(newvalue = as.integer(values %in% df1$values))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...