我是R.的新手。我正在尝试在我的数据框中设置一个新列,具体取决于其他3列中的内容。我查看过其他查询:
Populate a column using if statements in r
我认为可以解决它,但看起来我只能给出一个矢量,就像我尝试下面的代码一样:
IHC <- c("N","N","Y","N","N")
CCD <- c("13-Nov-2009", NA, "09-Feb-2011", "10-Dec-2012", "16-Nov-2009")
IHE <- c(NA, "20-Feb-2011",NA,NA,NA)
df1 <- data.frame(IHC, CCD, IHE)
InHouse <- function(IHC,CCD,IHE) {
if(IHE == "" && CCD == NA | IHC == "N") y <- ""
if(IHE == "") y <- CCD
if(CCD > IHE) y <- IHE
else y <- CCD
return(y)
}
df1$AAA <- sapply(c(df1$IHC, df1$CCD, df1$IHE), InHouse)
我收到以下错误:
Error in IHE == "" : 'IHE' is missing
任何帮助都会很棒。
答案 0 :(得分:1)
有几个问题。
IHE==""
。 IHE
为NA
,但从不""
。所以我假设你想要is.na(IHE)
?? and
(&&
而不是&
)的标量形式与or
(|
而不是{{1}的矢量化形式混合使用}})。为什么?? ||
是CCD > IHE
(总是如此),则比较NA
毫无意义。&
和|
具有相同的优先级,因此IHE == "" && CCD == NA | IHC == "N"
等同于(IHE == "" && CCD == NA) | IHC == "N"
。这就是你想要的吗?这是一种在不使用任何apply(...)
函数的情况下应用条件的方法。
df1 <- data.frame(IHC, CCD, IHE, stringsAsFactors=F)
df1$AAA <- CCD
cond <- with(df1,is.na(IHE) & is.na(CCD) | IHC == "N")
df1[cond,]$AAA <- ""
cond <- is.na(df1$IHE)
df1[cond,]$AAA <- df1[cond,]$CCD
cond <- with(df1,CCD > IHE & is.na(CCD) & is.na(IHE))
df1[cond,]$AAA <- df1[cond,]$IHE