【问题标题】:negative side effect on R dplyr mutate assignment to data.frame对 R dplyr 变异分配给 data.frame 的负面影响
【发布时间】:2019-08-26 10:49:51
【问题描述】:

R dplyr 变异代码用于将 df$Acres 从“1 月 10 日”更改为“1 到 10”。但是,一个负面影响是,当进行 -> df$Acres 分配时,列名“Acres”的剩余 data.frame 添加了“Acres.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.Acres'、'Acres.FamilyIncome'等。

【问题讨论】:

  • mutate 返回带有添加列的整个数据框,而不仅仅是添加的列。您应该使用df <- 分配它
  • 另外,看起来您正在修复一个导入错误,它猜测 1-10 是一个日期?这是正确的还是作为"10-Jan" 导入的字符串?您也许可以在导入时修复它
  • 是的,我正在修复“2019 年 1 月 10 日”的导入日期,但在 read.csv 上以“10-Jan”的形式导入 data.frame,我使用了 stringsAsFactors=F跨度>

标签: r dataframe dplyr


【解决方案1】:

我完全不确定您要在这里实现什么,但为什么不直接保存数据框呢?

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

【讨论】:

  • 解决了,谢谢。抱歉,我错过了那个任务,忘记了 mutate 返回整个数据帧。
猜你喜欢
  • 1970-01-01
  • 2017-09-09
  • 2021-08-02
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
相关资源
最近更新 更多