IF声明构造

时间:2017-05-16 06:50:13

标签: r excel

在excel中,您可以创建new_column并将其定义为如果old_column为空,则值为0;如果old_column不为空,则为1。

new_column=IF(ISBLANK([@[old_column]]),0,1)

任何人都可以想到一种有效的方法来为r中的数据框执行此操作。假设数据框中的列名为old_column,我想使用上面的描述将new_column添加到data_frame。

我试过了:

mydf$old_column[is.na(mydf$old_column] <- 0
mydf$old_column[!is.na(mydf$old_column] <- 1

但它给了我这个错误:

  

无效因子级别,NA生成错误。

2 个答案:

答案 0 :(得分:3)

mydf$new_column <- as.integer(!is.na(mydf$old_column)

你可能甚至不需要as.integer(),因为is.na()返回一个布尔向量,R将TRUEFALSE视为10分别

答案 1 :(得分:3)

如果你想遵循与excel相同的方案,那么你正在寻找ifelse:

mydf$new_column <- ifelse(is.na(mydf$old_column),0,1)

另外,在原始代码中,请注意您将值分配给old_column,因此第二个命令将找不到任何NA,并且将在任何地方分配1。

因子问题(在这里猜测)可能与你如何将数据从csv或xls文件加载到R中有关。许多方法都有一个参数stringsAsFactors你可能想要设置为False,否则你可能遇到这个问题错误类型。提供代码,我们可以帮助您。例如:

mydf <- read.csv("myfile.csv",stringsAsFactors = F)