【发布时间】:2016-04-30 23:35:27
【问题描述】:
我有两个数据集
a = 包含数千个不同天气事件观察结果的原始数据集
STATE EVTYPE
1 AL WINTER STORM
2 AL TORNADO
3 AL TSTM WIND
4 AL TSTM WIND
5 AL TSTM WIND
6 AL HAIL
7 AL HIGH WIND
8 AL TSTM WIND
9 AL TSTM WIND
10 AL TSTM WIND
b = 一个字典表,它有一些天气事件的标准拼写。
EVTYPE evmatch
1 HIGH SURF ADVISORY <NA>
2 COASTAL FLOOD COASTAL FLOOD
3 FLASH FLOOD FLASH FLOOD
4 LIGHTNING LIGHTNING
5 TSTM WIND <NA>
6 TSTM WIND (G45) <NA>
两者都被evtype合并到df_new中
library(dplyr)
df_new <- left_join(a, b, by = c("EVTYPE"))
STATE EVTYPE evmatch
1 AL WINTER STORM WINTER STORM
2 AL TORNADO NA
3 AL TSTM WIND THUNDERSTORM WIND
4 AL TSTM WIND THUNDERSTORM WIND
5 AL TSTM WIND THUNDERSTORM WIND
6 AL HAIL NA
7 AL HIGH WIND HIGH WIND
8 AL TSTM WIND THUNDERSTORM WIND
9 AL TSTM WIND THUNDERSTORM WIND
10 AL TSTM WIND THUNDERSTORM WIND
11 AL HEAVY RAIN NA
12 AL FLASH FLOOD NA
13 AL TSTM WIND THUNDERSTORM WIND
14 AL HEAVY RAIN NA
15 AL TSTM WIND THUNDERSTORM WIND
填写缺失的NAs
正如您在df_new$evmatch 中看到的,有一个 NA。如何合并数据集,但将evmatch 中的所有 NA 用来自EVTYPE 的相应单词填充。比如……
想要的输出
STATE EVTYPE evmatch
1 AL WINTER STORM WINTER STORM
2 AL TORNADO TORNADO
3 AL TSTM WIND THUNDERSTORM WIND
4 AL TSTM WIND THUNDERSTORM WIND
5 AL TSTM WIND THUNDERSTORM WIND
6 AL HAIL HAIL
7 AL HIGH WIND HIGH WIND
8 AL TSTM WIND THUNDERSTORM WIND
9 AL TSTM WIND THUNDERSTORM WIND
10 AL TSTM WIND THUNDERSTORM WIND
11 AL HEAVY RAIN HEAVY RAIN
12 AL FLASH FLOOD FLASH FLOOD
13 AL TSTM WIND THUNDERSTORM WIND
14 AL HEAVY RAIN HEAVY RAIN
15 AL TSTM WIND THUNDERSTORM WIND
【问题讨论】:
-
看起来像一个简单的
ifelse(is.na(evmatch), EVTYPE, evmatch),不是吗?或者我错过了什么。或使用here 中的基数。对于data.table,这可能是setDT(df_new)[is.na(evmatch), evmatch := EVTYPE] -
或
df_new$evmatch[is.na(df_new$evmatch] <- df_new$EVTYPE[is.na(df_new$evmatch] -
dplyr版本:filter(df_new, is.na(evmatch) %>% select(evmatch) <- filter(df_new, is.na(evmatch) %>% select(EVTYPE)...但老实说,我可能会使用上面的ifelse版本。 -
运行
ifelse时,返回错误object 'evmatch' not found。 -
在
ifelse中你需要使用df_new$evmatch
标签: r merge dplyr na missing-data