NA值作为R中IF语句的条件



我的目标是根据两个不同日期的值对数据集中的行进行分类。

if(!exists(MY_DATA$Date_1) & exists(MY_DATA$Date_2)) {
MY_DATA$NEW_COL <- c("Category_1")
} else {
MY_DATA$NEW_COL <- c("Category_2")
}

但它不起作用,我目前正在尝试以下简化版本:

if(!exists(MY_DATA$Date_1)){
MY_DATA$NEW_COL <- c("Category_1")
}

然而,这似乎只读取第一行的值,它要么给我一个所有值都为Category_1的列,要么根本没有列。

我也用is.na()is.null()exists()尝试过这种方法。

然而,这似乎只读取第一行的值,它要么给我一个所有值都为Category_1的列,要么根本没有列。

这是因为if语句需要长度为1的向量。当给定一个长度大于1的向量时,它将只读取第一个成员以做出决定TRUEFALSE

ifelse函数可以接受向量自变量,并将返回逻辑TRUE/FALSE的向量。它可能适合你的需要。


@r2evans最初重新表述了一个注释,exists()的使用是为了检查变量是否已经在R环境中定义。exists()将长度为1的字符向量作为参数,否则它将只检查第一个成员。

a = 1
b = 1
exists("a")
[1] TRUE
exists(c("a", "b"))
[1] TRUE
exists(c("ab", "a", "b"))
[1] FALSE

然而,值得注意的是,exists()不会检查值是否在向量内。如果您试图检查一个值是否在向量中,则需要运算符%in%


解决方案将在很大程度上取决于您的精确实现。

附言:这本来是一条评论,但作为一条评论太长了。

感谢大家的支持,ifelse成功了。

以下对我有效:

MY_DATA$NEW_COL  <- c("Category_2")
MY_DATA$NEW_COL  <- ifelse(!is.na(MY_DATA$Date_1),"Category_1","Category_2")

相关内容

  • 没有找到相关文章

最新更新