Заполнение значений из столбца в информационном кадре с условным оператором для NA - R - PullRequest
0 голосов
/ 05 июля 2018

У меня есть следующий фрейм данных:

Date        FLOW     Modelled   Infilled
01-01-1992  1.856    1.900      NA
02-01-1992  1.523    1.500      NA
03-01-1992  NA       2.400      NA    
04-01-1992  3.679    3.800      NA

Я хочу заполнить столбец Infilled значениями FLOW. Там, где есть значения «NA» в столбце FLOW временного ряда, я хочу заменить эти NA значениями из столбца Modeled.

Ответ должен выглядеть так:

Date        FLOW     Modelled   Infilled
01-01-1992  1.856    1.900      1.856
02-01-1992  1.523    1.500      1.523
03-01-1992  NA       2.400      2.400    
04-01-1992  3.679    3.800      3.679

У меня есть решение в Excel следующим образом:

Infilled column   =IF((FLOW="NA"),Modelled,FLOW)

Я еще не нашел решения в Интернете, которое помогло бы мне запрограммировать это в R. Временные ряды довольно длинные, и у меня есть несколько файлов, чтобы сделать это, поэтому цикл может быть наиболее подходящим решением. Я относительно новичок в R, и я не могу понять это. Помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Мы можем использовать base R

dat$Infilled <- dat$FLOW
i1 <- is.na(dat$FLOW)
dat$Infilled[i1] <- dat$Modelled[i1]

Или с data.table

library(data.table)
setDT(dat)[, Infilled := FLOW][is.na(FLOW), Infilled := Modelled][]
0 голосов
/ 05 июля 2018

Вы ищете coalesce

library(tidyverse)
dat%>%
   mutate(Infilled=coalesce(FLOW,Modelled))
        Date  FLOW Modelled Infilled
1 01-01-1992 1.856      1.9    1.856
2 02-01-1992 1.523      1.5    1.523
3 03-01-1992    NA      2.4    2.400
4 04-01-1992 3.679      3.8    3.679

В базе R вы можете сделать:

transform(dat,Infilled=ifelse(is.na(FLOW),Modelled,FLOW))
        Date  FLOW Modelled Infilled
1 01-01-1992 1.856      1.9    1.856
2 02-01-1992 1.523      1.5    1.523
3 03-01-1992    NA      2.4    2.400
4 04-01-1992 3.679      3.8    3.679
...