2015-10-05 3 views
1

У меня есть набор данных, и мне нужно использовать оператор IF для оценки каждого значения в 5-м столбце. Если он положительный, он должен сказать «Вверх», иначе он должен сказать «Не вверх». Проблема в том, что в конце каждого дня у меня было бы 5 значений NA, и мое утверждение не знает, как их оценить. Мой набор данных будет выглядеть примерно так:Как оценить значение NA в выражении if в R?

379 949 2115 2015-02-20 0 Not Up 
380 950 2115 2015-02-20 -5 Not Up 
381 951 2115 2015-02-20 -5 Not Up 
382 952 2115 2015-02-20 -5 Not Up 
383 953 2115 2015-02-20 -5 Not Up 
384 954 2115 2015-02-20 -5 Not Up 
385 955 2110 2015-02-20 0 Not Up 
386 956 2110 2015-02-20 NA Up 
387 957 2110 2015-02-20 NA Up 
388 958 2110 2015-02-20 NA Up 
389 959 2110 2015-02-20 NA Up 
390 960 2110 2015-02-20 NA Up 
391 571 2075 2015-02-23 15 Up 
392 572 2075 2015-02-23 15 Up 
393 573 2085 2015-02-23 0 Up 
394 574 2085 2015-02-23 -5 Up 
395 575 2085 2015-02-23 -5 Up 
396 576 2090 2015-02-23 -15 Up 
397 577 2090 2015-02-23 -20 Up 

Как вы можете видеть, после того, как значения НС заявление Если не удается оценить и вывод, что я правильно нужно.

Любая помощь в отношении того, как бороться с значениями «NA», будет с благодарностью!

ответ

1

Предполагая, что вы хотите «Не вверх» для значений NA:

df$x6 <- ifelse(df$x5 > 0 & !is.na(df$x5), "Up", "Not Up") 

Выход:

x1 x2 x3   x4 x5  x6 
1 379 949 2115 2015-02-20 0 Not Up 
2 380 950 2115 2015-02-20 -5 Not Up 
3 381 951 2115 2015-02-20 -5 Not Up 
4 382 952 2115 2015-02-20 -5 Not Up 
5 383 953 2115 2015-02-20 -5 Not Up 
6 384 954 2115 2015-02-20 -5 Not Up 
7 385 955 2110 2015-02-20 0 Not Up 
8 386 956 2110 2015-02-20 NA Not Up 
9 387 957 2110 2015-02-20 NA Not Up 
10 388 958 2110 2015-02-20 NA Not Up 
11 389 959 2110 2015-02-20 NA Not Up 
12 390 960 2110 2015-02-20 NA Not Up 
13 391 571 2075 2015-02-23 15  Up 
14 392 572 2075 2015-02-23 15  Up 
15 393 573 2085 2015-02-23 0 Not Up 
16 394 574 2085 2015-02-23 -5 Not Up 
17 395 575 2085 2015-02-23 -5 Not Up 
18 396 576 2090 2015-02-23 -15 Not Up 
19 397 577 2090 2015-02-23 -20 Not Up 

данных:

df <- structure(list(x1 = 379:397, x2 = c(949L, 950L, 951L, 952L, 953L, 
954L, 955L, 956L, 957L, 958L, 959L, 960L, 571L, 572L, 573L, 574L, 
575L, 576L, 577L), x3 = c(2115L, 2115L, 2115L, 2115L, 2115L, 
2115L, 2110L, 2110L, 2110L, 2110L, 2110L, 2110L, 2075L, 2075L, 
2085L, 2085L, 2085L, 2090L, 2090L), x4 = structure(c(1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L), .Label = c("2015-02-20", "2015-02-23"), class = "factor"), 
    x5 = c(0L, -5L, -5L, -5L, -5L, -5L, 0L, NA, NA, NA, NA, NA, 
    15L, 15L, 0L, -5L, -5L, -15L, -20L)), .Names = c("x1", "x2", 
"x3", "x4", "x5"), class = "data.frame", row.names = c(NA, -19L 
)) 
4

Вы можете использовать ifelse обрабатывать этот дополнительный случай:

function(x) { ifelse(is.na(x), "Unknown", ifelse(x > 0, "Up", "Not Up")) } 

Если вы хотите, чтобы сказать "Не Up" для NA значений используйте:

function(x) { ifelse(is.na(x) | x <= 0, "Not Up", "Up") } 
+2

Очень часто, когда я пишу 'ifelse' заявления, как это, я пишу явно то, что я хочу, чтобы это произошло в' NA' просто так что я не удивлюсь позже. Я бы рекомендовал развить эту привычку. – Benjamin

+1

Для этого вам нужно заменить '||' '' '(векторная версия). –