使用 NA 的条件语句从数据框中的列填充值 - R
Infilling values from column in dataframe with conditional statement for NAs - R
我有一个数据框如下:
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
我想用 FLOW 值填充 Infilled 列。在时间序列的 FLOW 列中有 "NA" 值的地方,我想用 Modeled 列中的值替换这些 NA。
答案应该是这样的:
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 比较陌生,我想不通。非常感谢帮助!
您正在寻找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
我们可以使用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][]
我有一个数据框如下:
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
我想用 FLOW 值填充 Infilled 列。在时间序列的 FLOW 列中有 "NA" 值的地方,我想用 Modeled 列中的值替换这些 NA。
答案应该是这样的:
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 比较陌生,我想不通。非常感谢帮助!
您正在寻找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
我们可以使用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][]