【发布时间】:2020-11-06 11:47:02
【问题描述】:
我的目标是根据两个不同日期的值对数据集上的行进行分类。
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()。
【问题讨论】:
-
欢迎来到 SO!请在
dput中包含您的数据示例,以获取reproducible example。 -
if不像您使用它那样被 vecotrized。你想要ifelse函数:MY_DATA$NEW_COL <- ifelse(!exists(MY_DATA$Date_1),"Category_1","Category_2") -
exists(MY_DATA$Date_1)仅在以下情况下才有意义:MY_DATA正好是一行;Date_1包含字符串;这些字符串指向本地环境或搜索路径中的变量。否则,也许你需要"Date_1" %in% names(MY_DATA)。 -
另外,在
if子句中使用&(单个)的唯一合适的情况是,如果你将它包装在一些聚合函数中,比如any或all,否则它可能按您的需要工作,但很容易失败。为什么?&返回一个长度为 0 或更多的逻辑向量,而if要求长度正好为 1。
标签: r if-statement null dataset