Выполните оператор if then на основе значений внутри фрейма данных или вектора - PullRequest
0 голосов
/ 04 июня 2019

В качестве примера предположим, что у меня есть эти данные:

key <- data.frame(num=c(1,2,3,4,5), month=c("January", "Feb", "March", "Apr", "May"))
data <- c(4,2,5,3)

Я хочу создать новый вектор data2, используя отображение от num до month, содержащееся в key. Я могу сделать это вручную, используя case_when, выполнив сразу много операторов if:

library(dplyr)
data2<-case_when(
    data==1 ~ "January",
    data==2 ~ "Feb",
    data==3 ~ "March",
    data==4 ~ "Apr",
    data==5 ~ "May"
)

Тем не менее, скажите, что я хочу автоматизировать этот процесс (возможно, у меня на самом деле тысячи операторов if) и использовать отображение, содержащееся в key. Возможно ли это или что-то подобное?

Вот неудачная попытка кода:

data2 <- case_when(data=key$num ~ key$month)

Я собираюсь написать вектор под названием data2 со следующими элементами: c("Apr","Feb","May","March"). Как я могу это сделать?

1 Ответ

1 голос
/ 04 июня 2019

Вы можете использовать индексирование match и base R (также установите stringsAsFactors = FALSE при инициализации data.frame, как я сделал ниже):

key <- data.frame(num=c(1,2,3,4,5), month=c("January", "Feb", "March", "Apr", "May"), stringsAsFactors = FALSE)
data2 <- key$month[match(data, key$num)]
data2
#[1] "Apr"   "Feb"   "May"   "March"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...