如何评估 R 中 if 语句中的 NA 值?
How to evaluate a NA value in an if statement in R?
我有一个数据集,我需要使用 IF 语句来评估第 5 列中的每个值。如果它是正数,它应该说 'Up' 否则它应该说 'Not up'。问题是每天结束时我都会有 5 个 NA 值,而我的语句不知道如何评估这些值。我的数据集看起来像:
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 值之后,If 语句无法正确评估和输出我需要的内容。
任何有关如何处理 'NA' 值的帮助将不胜感激!
您可以使用 ifelse
来处理这种额外的情况:
function(x) { ifelse(is.na(x), "Unknown", ifelse(x > 0, "Up", "Not Up")) }
如果你想让它对 NA 值说 "Not Up",请使用:
function(x) { ifelse(is.na(x) | x <= 0, "Not Up", "Up") }
假设您想要 "Not up" 作为 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
))
我有一个数据集,我需要使用 IF 语句来评估第 5 列中的每个值。如果它是正数,它应该说 'Up' 否则它应该说 'Not up'。问题是每天结束时我都会有 5 个 NA 值,而我的语句不知道如何评估这些值。我的数据集看起来像:
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 值之后,If 语句无法正确评估和输出我需要的内容。
任何有关如何处理 'NA' 值的帮助将不胜感激!
您可以使用 ifelse
来处理这种额外的情况:
function(x) { ifelse(is.na(x), "Unknown", ifelse(x > 0, "Up", "Not Up")) }
如果你想让它对 NA 值说 "Not Up",请使用:
function(x) { ifelse(is.na(x) | x <= 0, "Not Up", "Up") }
假设您想要 "Not up" 作为 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
))