У меня есть очень уникальная проблема, которая, я надеюсь, будет иметь решение.
data <- data.frame('col1' = c('hi', 'hey', 'bye', 'cya'))
Приведенные выше данные представляют собой просто столбец со значениями приветствия и ухода.
У меня есть два вектора здесь.
greet <- c('hey', 'hi')
leave <- c('cya', 'bye')
Я разместил их в обратном порядке, так как хочу, чтобы порядок соответствовал порядку, указанному в таблице. Теперь я применяю функцию
guesslabel <- function(table, m) {
data %>% dplyr::mutate(guess = ifelse(col1 %in%(m), m, 'none'))
}
Когда я запускаю функцию как таковую
guesslabel(data, greet)
Я получаю следующий вывод:
col1: _____ guess:
hey _____ hi
hi _____ hey
bye _____ none
cya _____ none
Результат, который я хочу:
col1: _____ guess:
hey _____ hey
hi _____ hi
bye _____ none
cya _____ none
Извините за форматирование, не знаю, как это сделать. Мне просто было интересно, как я извлеку конкретное значение из приветствия списка, которое используется для фильтрации переменной столбца. Таким образом, предположение столбца должно совпадать с col1 (игнорировать значения none, так как это можно решить позже), и я не хочу просто использовать значение из col1. Любая помощь приветствуется.
Не совсем так, я хотел бы добавить дополнительный столбец, который получает значение из списка приветствия. Это странный запрос, но это особенность дизайна данных, которые я использую.
Может быть, вы можете использовать match
-
library(dplyr)
guesslabel <- function(table, m) {
table %>%
mutate(guess = m[match(col1, m)],
guess = tidyr::replace_na(guess, 'none'))
}
guesslabel(data, greet)
# col1 guess
#1 hi hi
#2 hey hey
#3 bye none
#4 cya none
guesslabel(data, leave)
# col1 guess
#1 hi none
#2 hey none
#3 bye bye
#4 cya cya
Хочешь
filter
?data %>% filter(col1 %in% greet)