Если значение в столбце начинается с ... мутировать другой столбец с заданным текстом, в R - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь создать функцию if, которая позволяет изменять столбец «city» в кадре данных с определенным названием города, если в столбце «zipcode» значение начинается с определенного числа.

Например: если почтовый индекс начинается с 1, изменить значение столбца города с помощью «NYC», в противном случае, если почтовый индекс начинается с 6, изменить значение столбца города с «Чикаго», в противном случае, если почтовый индекс начинается с 2, изменить столбец городазначение с "Бостон",

и т. д.

От:

city              zipcode
NYC               11211
DC                20910
NYC               11104
NA                11106
NA                2008
NA                60614

Кому:

city             zipcode
NYC               11211
DC                20910
NYC               11104
NYC               11106
DC                2008
Chicago           60614

Это способ борьбы сЗначения NA: Функция if просто переписывает один и тот же город для значений, в которых они уже присутствуют, и вводит название города в случае, если есть значение NA

Имя кадра данных data.frame Имя столбца zipcode иcity.Они оба являются факторами и должны оставаться таковыми для моих дальнейших моделей.

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

PS: извините за плохую запись,Я новичок в сообществе.

Заранее спасибо!

1 Ответ

0 голосов
/ 28 февраля 2019

Вот решение, которое может работать для вас.

Полный код:

# load library
library(tidyverse)

# create the sample dataframe
df <- tribble(~city, ~zipcode,
              'NYC',11211,
              'DC',20910,
              'NYC', 11104,
              NA, 11106,
              NA, 2008,
              NA, 60614)

# change the NAs to the appropriate values
df <- df %>%
  mutate(
    city = case_when(
      str_sub(zipcode, 1, 1) == '1' ~ 'NYC',
      str_sub(zipcode, 1, 1) == '2' ~ 'DC',
      str_sub(zipcode, 1, 1) == '6' ~ 'Chicago',
      TRUE ~ city
    )
  )

# convert everything to factors
df <- df %>%
  mutate(
    city = as.factor(city),
    zipcode = as.factor(zipcode)
  )

#preview the output
glimpse(df)

Вывод функции glimpse ():

Observations: 6
Variables: 2
$ city    <fct> NYC, DC, NYC, NYC, DC, Chicago
$ zipcode <fct> 11211, 20910, 11104, 11106, 2008, 60614

ТрюкЯ использовал сначала сохранить все как строку или число, заполнить пропущенные значения, а затем преобразовать в множитель.

...