Заменить NA определенной переменной определенным значением - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть набор данных, который выглядит как

Date       temperature   sysid      appliance_name 
01.03.18   13            abcd123    silverstar 320
02.03.18   15            abcd123    silverstar 320
03.03.18   17            abcd123    silverstar 320
04.03.18   15            abcd123    silverstar 320
01.03.18   18            bcfw5678   silverstar erp30i
02.03.18   14            bcfw5678   NA
03.03.18   18            bcfw5678   silverstar erp30i
04.03.18   10            bcfw5678   silverstar erp30i
01.03.18   16            ygft3456   NA
02.03.18   13            ygft3456   silverstar 30i
03.03.18   12            ygft3456   silverstar 30i
04.03.18   18            ygft3456   silverstar 30i

Для меня совершенно очевидно, что я должен заполнить NA такими же appliance_name, что и appliance_name записи с таким же sysid.Например, запись 02.03.18 14 bcfw5678 NA должна заменить NA на silverstar erp30i, поскольку из других записей ясно, что этот конкретный sysid принадлежит silverstar erp30i.Я не могу использовать do.locf, поскольку возможно, что предыдущая запись принадлежит другой группе устройств.

Каковы способы лечения АН в этом случае?

1 Ответ

0 голосов
/ 30 ноября 2018

Один из способов справиться с этим - заменить NA на первое не-NA значение в каждой группе (sysid).

library(dplyr)

df %>%
  group_by(sysid) %>%
  mutate(appliance_name = replace(appliance_name, is.na(appliance_name), 
                        appliance_name[which.max(!is.na(appliance_name))]))



#    Date     temperature sysid    appliance_name  
#   <fct>          <int> <fct>    <fct>           
# 1 01.03.18          13 abcd123  silverstar320   
# 2 02.03.18          15 abcd123  silverstar320   
# 3 03.03.18          17 abcd123  silverstar320   
# 4 04.03.18          15 abcd123  silverstar320   
# 5 01.03.18          18 bcfw5678 silverstarerp30i
# 6 02.03.18          14 bcfw5678 silverstarerp30i
# 7 03.03.18          18 bcfw5678 silverstarerp30i
# 8 04.03.18          10 bcfw5678 silverstarerp30i
# 9 01.03.18          16 ygft3456 silverstar30i   
#10 02.03.18          13 ygft3456 silverstar30i   
#11 03.03.18          12 ygft3456 silverstar30i   
#12 04.03.18          18 ygft3456 silverstar30i   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...