r语言 - 使用基于多个列的二进制数据创建新列



我有一个数据框架,我想在其中创建一个基于前几列中的记录的0/1的新列(这将表示物种的缺失/存在)。我一直在尝试这个:

update_cat$bobpresent <- NA #creating the new column
x <- c("update_cat$bob1999", "update_cat$bob2000", "update_cat$bob2001","update_cat$bob2002", "update_cat$bob2003", "update_cat$bob2004", "update_cat$bob2005", "update_cat$bob2006","update_cat$bob2007", "update_cat$bob2008", "update_cat$bob2009") #these are the names of the columns I want the new column to base its results in
bobpresent <- function(x){
  if(x==NA)
    return(0)
  else
    return(1)
} # if all the previous columns are NA then the new column should be 0, otherwise it should be 1

update_cat$bobpresence <- sapply(update_cat$bobpresent, bobpresent) #将函数应用于新列

一切都结束了,直到最后一个字符串,我得到这个错误:

Error in if (x == NA) return(0) else return(1) : 
  missing value where TRUE/FALSE needed
谁能给我点建议?非常感谢您的帮助。

根据定义,对NA的所有操作都会得到NA,因此x == NA 总是计算结果为NA。如果要检查某个值是否为NA,必须使用is.na函数,例如:

> NA == NA
[1] NA
> is.na(NA)
[1] TRUE

传递给sapply的函数期望TRUE或FALSE作为返回值,但它得到NA,因此出现错误消息。您可以通过像这样重写函数来修复这个问题:

bobpresent <- function(x) { ifelse(is.na(x), 0, 1) }

无论如何,根据你原来的帖子,我不明白你想做什么。此更改仅修复了您使用sapply获得的错误,但修复程序的逻辑是另一回事,并且您的帖子中没有足够的信息。

相关内容

  • 没有找到相关文章

最新更新