我是R的新手,我正在尝试根据其他3列中的内容在我的数据框中设置一个新列。我看过其他的查询,比如:
Populate a column using if statements in r
我认为这可以解决这个问题,但看起来我只能给sapply一个向量,因为当我尝试以下代码时:
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任何帮助都是最好的。
发布于 2014-03-09 07:19:33
有几个问题。
IHE==""。所以我假设你希望is.na(IHE)??and的标量形式(&&而不是&)与or的矢量化形式(|而不是||)混合在一起。为什么??NA (总是这样),比较代码是没有意义的。&和|具有相同的优先级,因此IHE == "" && CCD == NA | IHC == "N"等同于<代码>d24CCD > IHE >。这是您想要的吗??这是一种无需使用任何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,]$IHEhttps://stackoverflow.com/questions/22257400
复制相似问题