2013-04-25 10 views
0

У меня есть дата-рамка, в которой я хочу создать новый столбец с 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) #apply функция в новый столбец

Все идет FINA до последней строки, где I» m получение этой ошибки:

Error in if (x == NA) return(0) else return(1) : 
    missing value where TRUE/FALSE needed 

Может кто-нибудь, пожалуйста, посоветуйте мне? Ваша помощь будет высоко оценена.

+0

На каком языке это? Р? –

+0

да, извините, в R – Cat

+0

попробуйте, возможно, 'update_cat $ bobpresent <- ifelse (all (is.na (update_cat [, x])), 1, 0)' где x - это только имя столбца 'c (" bob1999 ", «bob2000», «bob2001») ..... – haki

ответ

3

По определению все операции по NANA даст, поэтому 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, но исправление логики вашей программы - это другое дело, и в вашем сообщении недостаточно информации.

+0

Спасибо вам за ваши предложения. Однако никто из них не работает. Он успешно преобразует все в 0, не выделяя столбцы с другими данными (например, 1,2 - это количество захваченных животных). Любая идея, что происходит? – Cat

+0

Вам нужно дать нам небольшой образец данных, чтобы мы знали, какие значения (и их класс) находятся в каждом столбце. Кроме того, ваша функция не относится к внешней переменной 'x', а скорее к переменной, которую вы назвали в вызове' sapply'. Думаю, ты хочешь сделать что-то еще. Можете ли вы записать псевдокод в каком-то цикле, чтобы мы знали, что должно произойти? –