尝试使用switch()在R中的if else语句中返回空值时出错

尝试使用switch()在R中的if else语句中返回空值时出错,r,dataframe,if-statement,null,R,Dataframe,If Statement,Null,我有一个结果为空的if语句,但在尝试运行代码时,我一直收到错误 例如,my df有两个数值范围为0到100的数值列。我想基于以下psuedo代码创建一个新列: ifelse(df$column1==0,NULL,df$column2/df$column1) 我已尝试过,但当我尝试时,我收到一个错误: EXPR必须是长度为1的向量 开关代码: df$column3 = switch((df$column1[i] != 0) + 1, NULL,

我有一个结果为空的if语句,但在尝试运行代码时,我一直收到错误

例如,my df有两个数值范围为0到100的数值列。我想基于以下psuedo代码创建一个新列:

ifelse(df$column1==0,NULL,df$column2/df$column1)

我已尝试过,但当我尝试时,我收到一个错误: EXPR必须是长度为1的向量

开关代码:

df$column3 = switch((df$column1[i] != 0) + 1, 
             NULL, 
             df$column2/df$column1)

当我尝试将其放入for循环以分别查看每条记录时,我遇到了另一个错误(与我尝试ifelse()时遇到的错误类似):
df$column3[i]中的错误看起来您的伪代码基本上在那里

下面是R附带的
iris
数据集示例:

iris$newcol = ifelse(
  iris$Sepal.Length < 5, 
  NA_real_, 
  iris$Sepal.Length/iris$Sepal.Width
  )
iris
iris$newcol=ifelse(
鸢尾花$萼片。长度<5,
那是真的,
鸢尾$萼片。长/鸢尾$萼片。宽
)
虹膜

NULL
在大多数向量中都不是合法值。请改用
NA
。谢谢!对不起,我没有提到我有两个场景。这适用于第一个场景,但当我尝试将第二个场景w/a date作为“else”时结果,我在该字段中得到了一个非日期。该代码的问题是,因为我使用的是日期,所以该字段的格式被转换为空字符b/c,所以“else”部分的日期显示为18345。我尝试了fifelse,但我得到的错误是NA_real_不是同一类。我一直在转换该字符将“日期”转换为可读日期。当我尝试使用as.date()将该字段转换为日期时,我得到一个原始错误。可能您只是想使用逻辑
NA
?如果您使用逻辑值,R将尝试强制为您指定缺失值的类型。我习惯于指定类型,但您不必这样做。
library('lubridate');dates=c('2020-01-01','2020-01-15','2020-01-30');日期=ymd(日期);日期[3]=NA
谢谢!这是我的代码:df$newDateCol=ifelse(df$anotherCol==“Yes”,Sys.Date())这就是我尝试使用fifelse、开关并重新排列它们的地方。当我尝试在null部分使用NA时,我得到:18292…当我使用fifelse时,我得到一个错误:“是”的类型是逻辑的,但“否”的类型是双精度的。可能只需先用
Sys.Date()
填充列,然后替换?
df=data.frame(x=sample(c('Yes','No',NA),size=10,replace=TRUE),y=Sys.Date();df$y[which(df$x='Yes')]=NA
Perfect!!我想这会有用的!!非常感谢!
iris$newcol = ifelse(
  iris$Sepal.Length < 5, 
  NA_real_, 
  iris$Sepal.Length/iris$Sepal.Width
  )
iris