在r中使用IF/AND/ELSE逻辑

  • 本文关键字:AND ELSE 逻辑 IF r
  • 更新时间 :
  • 英文 :


我想这是为了便于复制。

我有一个类似的表:

UnitID <- c(177834,180203,222178,138558)
Year <- c(2019,2019,2019,2019)
EndowmentF <- c(108431567,NA,444076565,NA)
EndowmentG_ID<-c(177834,180203,222178,138558)
EndowmentG_YR <- c(2019,2019,2019,2019)
EndowmentG <- c(NA,1220803,NA,17251420)
Endow <- data.frame(UnitID,Year,EndowmentF,EndowmentG_ID,EndowmentG_YR,EndowmentG)

我尝试创建一个名为Endowment的新变量,因为原始数据是基于不同的报告方法在两个表中报告的。当我使用以下代码时,我得到一个错误,变量没有计算:

Endowments <- Endow %>% mutate(
Endowment= if(UnitID=EndowmentG_ID && Year=EndowmentG_YR && is.na(EndowmentG))
{EndowmentF} else {EndowmentG})

我在控制台得到以下错误,我不确定我做错了什么。任何帮助或建议都会很好。我能够使用IF/AND逻辑在Excel中工作,但不确定如何在r中修复它。

Error: unexpected '=' in:
"Endowments <- Endow %>% mutate(
Endowment= if(UnitID="
>   {EndowmentF} else {EndowmentG})
Error: unexpected 'else' in "  {EndowmentF} else"

尝试这段代码,我认为问题是你应该使用==而不是=条件短语:

Endowments <- Endow %>% mutate(
if(UnitID == EndowmentG_ID && Year == EndowmentG_YR && is.na(EndowmentG)){
Endowment = EndowmentF} else {
Endowment = EndowmentG
}
)

您可以使用ifelse,因为它是矢量化的。

library(dplyr)
Endow <- Endow %>%
mutate(Endowment = ifelse(UnitID == EndowmentG_ID & Year == EndowmentG_YR & 
is.na(EndowmentG), EndowmentF, EndowmentG))
Endow
#  UnitID Year EndowmentF EndowmentG_ID EndowmentG_YR EndowmentG Endowment
#1 177834 2019  108431567        177834          2019         NA 108431567
#2 180203 2019         NA        180203          2019    1220803   1220803
#3 222178 2019  444076565        222178          2019         NA 444076565
#4 138558 2019         NA        138558          2019   17251420  17251420

最新更新