我想这是为了便于复制。
我有一个类似的表:
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