2015-07-12 5 views
0

Привет Я пытаюсь установить все значения не-NA равными 1 в столбце моего набора данных. Вот некоторые примерные данные:Установить все не-NA в столбце 1

structure(list(ID = c(1, 1, 1, 1, 2, 3, 4, 4), match = structure(c(NA, 
10227, 10227, 10957, NA, 11323, NA, 11323), class = "Date"), 
actual.date = structure(c(10135, 10258, 11808, 11808, 10773, 
13027, 13269, 12086), class = "Date")), .Names = c("ID", 
"match", "actual.date"), row.names = c(NA, -8L), class = "data.frame") 

    ID  match actual.date 
1 1  <NA> 1997-10-01 
2 1 1998-01-01 1998-02-01 
3 1 1998-01-01 2002-05-01 
4 1 2000-01-01 2002-05-01 
5 2  <NA> 1999-07-01 
6 3 2001-01-01 2005-09-01 
7 4  <NA> 2006-05-01 
8 4 2001-01-01 2003-02-03 

Для столбца «матч» Я хочу, чтобы установить все не-NA-х равен 1.

+2

Где ты застрял? – Roland

+0

Yup Я хочу сделать соответствие двоичному столбцу, где есть 1, если существует дата и 0, если это не – michael

+1

Почему бы вам не спросить об этом? На самом деле проще, чем вы спросили: 'as.integer (! Is.na (DF $ match))'. – Roland

ответ

1

Обычно используется что-то вроде dat$match[!is.na(dat$match)] <- 1, но это приводит к ошибке в Дата. Можно использовать вместо ifelse:

dat$match <- ifelse(is.na(dat$match), NA, 1) 
dat 
# ID match actual.date 
# 1 1 NA 1997-10-01 
# 2 1  1 1998-02-01 
# 3 1  1 2002-05-01 
# 4 1  1 2002-05-01 
# 5 2 NA 1999-07-01 
# 6 3  1 2005-09-01 
# 7 4 NA 2006-05-01 
# 8 4  1 2003-02-03 

Если вы хотите, чтобы двоичный столбец (как вы, кажется, предлагают в комментариях по первоначальному вопросу), вы можете просто сделать:

dat$match <- !is.na(dat$match) 
dat 
# ID match actual.date 
# 1 1 FALSE 1997-10-01 
# 2 1 TRUE 1998-02-01 
# 3 1 TRUE 2002-05-01 
# 4 1 TRUE 2002-05-01 
# 5 2 FALSE 1999-07-01 
# 6 3 TRUE 2005-09-01 
# 7 4 FALSE 2006-05-01 
# 8 4 TRUE 2003-02-03 
+0

, потому что это формат даты. Что-то вроде 'df $ match = as.integer (df $ match); df $ match [! is.na (df $ match)] = 1' работает. –

+0

Я бы пошел с 'dat $ match <- (! Is.na (dat $ match))^NA' просто потому, что я абсолютно ненавижу' ifelse' (но это только я, вероятно) –

+0

@DavidArenburg почему-то? Я считаю, что 'ifelse' является вполне читаемым и полезным, и я использую его довольно регулярно. – josliber

Смежные вопросы