用特定值替换特定变量的 NA
Replace NAs of a particular variable with a particular value
我有一个看起来像
的数据集
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
我很清楚用相同的 appliance_name
填充 NA 与具有相同 sysid
的记录的 appliance_name
相同。例如,记录 02.03.18 14 bcfw5678 NA
应该将 NA 替换为 silverstar erp30i
,因为从其他记录可以清楚地看出这个特定的 sysid
属于 silverstar erp30i
。我不能使用 do.locf
,因为之前的记录可能属于另一个设备组。
这种情况下NA的治疗方法有哪些?
处理此问题的一种方法是将 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
我有一个看起来像
的数据集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
我很清楚用相同的 appliance_name
填充 NA 与具有相同 sysid
的记录的 appliance_name
相同。例如,记录 02.03.18 14 bcfw5678 NA
应该将 NA 替换为 silverstar erp30i
,因为从其他记录可以清楚地看出这个特定的 sysid
属于 silverstar erp30i
。我不能使用 do.locf
,因为之前的记录可能属于另一个设备组。
这种情况下NA的治疗方法有哪些?
处理此问题的一种方法是将 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