使用Dplyr对一个变量进行条件插补

时间:2018-11-26 19:01:39

标签: r

我有一个数据集(主数据集),如下所示:

id cleaning_fee boro           zipcode           price
1  NA           Manhattan       10014            100
2  70           Manhattan       10013            125
3  NA           Brooklyn        11201            97
4  25           Manhattan       10012            110
5  30           Staten Island   10305            60

通过Borough和Zipcode分组,我知道了(使用na.rm = True):

borough   zipcode avgCleaningFee    
Brooklyn    11217   88.32000        
Brooklyn    11231   89.05085        
Brooklyn    11234   42.50000        
Manhattan   10003   97.03738        
Manhattan   10011   109.97647

我要执行的操作是通过以下任一方式将NA插入到主数据集中的“ cleaning_fee”变量中:

(a)估算分组平均值(如上表2所示,其中我在2个条件下分组)

(b)对变量(例如邮政编码,boro和价格)使用KNN回归来估算清洁费变量。 (附言:我了解KNN回归的工作原理,但我没有使用过,如果您能在1行左右的时间里解释代码,那将是很棒的)

如果有人可以帮我解决这个问题,那就太好了。谢谢!

1 个答案:

答案 0 :(得分:1)

我们可以使用第一种方法

library(dplyr)
df1 %>%
   group_by(Borough, Zipcode) %>%
   mutate(cleaning_fee = replace(Cleaning_fee, 
            is.na(Cleaning_fee), mean(Cleaning_fee, na.rm = TRUE))

或者使用na.aggregate中的zoo

library(zoo)
df1 %>%
  group_by(Borough, Zipcode) %>%
  mutate(cleaning_fee = na.aggregate(cleaning_fee))