Как создать новую символьную переменную в R? - PullRequest
0 голосов
/ 19 октября 2019

В моем классе по науке о данных у меня есть заданный вопрос: «Используйте функции base R для создания переменной, называемой region, во фрейме данных birth_data, который принимает значения« Северо-восток, Средний Запад, Юг и Запад ».

В настоящее время мой код

Northeast <- birth_data$state %in% c("CT", "ME", "MA", "NH", "RI", "VT", "NJ", "NY","PA")

Midwest <- birth_data$state %in% c("IL", "IN", "MI", "OH", "WI",
"IA", "KS", "MN", "MO", "NE", "ND", "SD")

South <- birth_data$state %in% c("DE", "DC", "FL", "GA", "MA", "NC", "SC", "VA", "WV", "AL", "KY", "MS", "TN", "AS", "LA", "OK", "TX")

West <- birth_data$state %in% c("AZ", "CO", "ID", "MO", "NV", "NM", "UT", "WY","AK", "CA", "HI", "OR", "WA")

birth_data$region <- c("Northeast","Midwest","South","West")
birth_data <- birth_data$region

Ошибка в $<-.data.frame (*tmp*, регион, значение = c ("Северо-восток", "Средний Запад"): замена имеет 4 строки, данные имеют 1103629

Я не уверен, как исправить эту проблему, но я знаю, что это связано с длиной вектора. Кроме того, я не уверен, как назначать переменные для символов. Если разрешен dplyr, я чувствую,Я был бы более успешным.

Ответы [ 2 ]

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

В самом простом случае вы можете сделать следующее:

birth_data[Northeast, "region"] <- "Northeast"
birth_data[Midwest, "region"] <- "Midwest"
birth_data[South, "region"] <- "South"
birth_data[West, "region"] <- "West"

Вы можете стать более изощренным, например, построить вектор и затем добавить его к data.frame, но это довольно быстро завершит работу.

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

Вы должны выполнить более сложную обработку.

regions.vec <- c("Northeast", "Midwest", "South", "West")
regions <- birth_data[, regions.vec]

# for one row, use the binary vector row to select from regions.vec
process.row <- function(row) regions.vec[row]

# go through entire regions subdataframe and do this row by row
result <- list()
for (i in 1:dim(regions[1])) {
  result[[i]] <- process.row(regions[i, ])
}

# flatten the result list and add it to the rows of birth_data
birth_data$region <- unlist(result)
...