我的目标是根据两个不同日期的值对数据集中的行进行分类。
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的向量时,它将只读取第一个成员以做出决定TRUE
或FALSE
。
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")