在R中填充新列

时间:2014-03-07 18:01:20

标签: r

我是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

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

有几个问题。

  1. 您的条件涉及比较:IHE==""IHENA,但从不""。所以我假设你想要is.na(IHE) ??
  2. 您正在将and&&而不是&)的标量形式与or|而不是{{1}的矢量化形式混合使用}})。为什么??
  3. 如果||CCD > IHE(总是如此),则比较NA毫无意义。
  4. 逻辑运算符&|具有相同的优先级,因此IHE == "" && CCD == NA | IHC == "N"等同于(IHE == "" && CCD == NA) | IHC == "N"。这就是你想要的吗?
  5. 最重要的是,你的情况不是互相排斥的。
  6. 这是一种在不使用任何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