отрицательный побочный эффект при R dplyr изменяет присвоение data.frame

#r #dataframe #dplyr

#r #фрейм данных #dplyr

Вопрос:

Код R dplyr mutate работает для изменения df $ Acres с ’10 января’ на «1-10». Однако одним из отрицательных побочных эффектов было то, что при назначении -> df $ Acres в оставшийся data.frame для имени столбца ‘Acres’ добавлено ‘Acres.Акры’, ‘Акры.FamilyIncome’. Это можно увидеть в str (df) ниже:

 df %>%
  mutate(Acres = case_when(Acres == "10-Jan" ~ "1 to 10",
                           TRUE ~ Acres)) -> df$Acres


> str(df)
'data.frame':    22745 obs. of  18 variables:
 $ Acres       :'data.frame':    22745 obs. of  18 variables:
  ..$ Acres       : chr  "1 to 10" "1 to 10" "1 to 10" "1 to 10" ...
  ..$ FamilyIncome: int  150 180 280 330 330 480 520 550 1400 1400 ...
  ..$ FamilyType  : chr  "Married" "Female Head" "Female Head" "Female Head" ...
  ..$ NumBedrooms : int  4 3 4 2 3 0 3 3 3 3 ...
  ..$ NumChildren : int  1 2 0 1 1 3 2 1 1 2 ...
  ..$ NumPeople   : int  3 4 2 2 2 4 3 2 4 3 ...
  ..$ NumRooms    : int  9 6 8 4 5 1 8 5 9 7 ...
  ..$ NumUnits    : chr  "Single detached" "Single detached" "Single detached" "Single detached" ...
  ..$ NumVehicles : int  1 2 3 1 1 0 0 1 2 1 ...
  ..$ NumWorkers  : int  0 0 1 0 0 0 0 1 1 1 ...
  ..$ OwnRent     : chr  "Mortgage" "Rented" "Mortgage" "Rented" ...
  ..$ YearBuilt   : chr  "1950-1959" "Before 1939" "2000-2004" "1950-1959" ...
  ..$ HouseCosts  : int  1800 850 2600 1800 860 700 270 800 710 1500 ...
  ..$ ElectricBill: int  90 90 260 140 150 140 130 1 150 300 ...
  ..$ FoodStamp   : chr  "No" "No" "No" "No" ...
  ..$ HeatingFuel : chr  "Gas" "Oil" "Oil" "Oil" ...
  ..$ Insurance   : int  2500 0 6600 0 660 0 100 0 1000 0 ...
  ..$ Language    : chr  "English" "English" "Other European" "English" ...
 $ FamilyIncome: int  150 180 280 330 330 480 520 550 1400 1400 ...
 $ FamilyType  : chr  "Married" "Female Head" "Female Head" "Female Head" ...
  

Исходный data.frame содержал 18 переменных, после выполнения dplyr mutate обновленный data.frame по-прежнему содержит 18 переменных, но теперь с добавлением ‘Acres.Акры’, ‘Акры.FamilyIncome’ и т.д.

Комментарии:

1. mutate возвращает весь фрейм данных с добавленным столбцом, а не только добавленный столбец. Вы должны назначить его с df <-

2. Кроме того, похоже, что вы исправляете ошибку импорта, в которой предполагается, 1-10 что это дата? Это правильно или строка импортирована как "10-Jan" ? Возможно, вы сможете исправить это при импорте

3. Да, я фиксирую дату импорта, которая равна «1/10/2019», но импортируется в data.frame как «10 января», для чтения.csv я использовал stringsAsFactors =F

Ответ №1:

Я точно не уверен, чего вы пытаетесь достичь здесь, но почему бы просто не сохранить фрейм данных таким образом?

 df <- df %>%
  mutate(Acres = case_when(Acres == "10-Jan" ~ "1 to 10",
                           TRUE ~ Acres))
  

Комментарии:

1. это решило проблему, спасибо. извините, я пропустил это назначение, забыв, что mutate возвращает весь dataframe.