首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中填充新列

在R中填充新列
EN

Stack Overflow用户
提问于 2014-03-08 02:01:20
回答 1查看 257关注 0票数 0

我是R的新手,我正在尝试根据其他3列中的内容在我的数据框中设置一个新列。我看过其他的查询,比如:

Populate a column using if statements in r

我认为这可以解决这个问题,但看起来我只能给sapply一个向量,因为当我尝试以下代码时:

代码语言:javascript
复制
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)

我得到以下错误:

代码语言:javascript
复制
Error in IHE == "" : 'IHE' is missing

任何帮助都是最好的。

EN

回答 1

Stack Overflow用户

发布于 2014-03-09 07:19:33

有几个问题。

  1. 你的条件包括像这样的比较:IHE==""。所以我假设你希望is.na(IHE)??
  2. You将and的标量形式(&&而不是&)与or的矢量化形式(|而不是||)混合在一起。为什么??
  3. 如果其中任何一个是NA (总是这样),比较代码是没有意义的。
  4. 逻辑运算符&|具有相同的优先级,因此IHE == "" && CCD == NA | IHC == "N"等同于<代码>d24CCD > IHE >。这是您想要的吗??
  5. 最重要的是,您的条件不是相互排斥的。

这是一种无需使用任何apply(...)函数即可应用条件的方法。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22257400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档