有空值时如何做出逻辑响应

时间:2019-05-20 16:28:04

标签: r

我有这样的数据

df<- structure(list(X1 = c(37L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, NA, 
11L, 12L), X2 = c(40L, NA, 35L, 35L, 35L, 34L, 29L, 28L, 28L, 
NA, 25L, 24L), X3 = c(60L, 44L, 49L, 41L, NA, NA, NA, 25L, 26L, 
NA, NA, 22L), T1 = c(19L, 55L, 47L, 46L, 36L, 42L, 25L, NA, 33L, 
42L, 50L, 22L), T2 = c(75L, NA, 32L, 44L, 27L, 31L, 17L, NA, 
18L, 45L, 10L, 11L), T3 = c(5L, 6L, 7L, 8L, 9L, 10L, 11L, NA, 
46L, 36L, 42L, NA)), class = "data.frame", row.names = c(NA, 
-12L))

如果有值或没有值,我想得到True或False。所以输出看起来像这样

    X1       X2     X3      T1      T2      T3
1   TRUE    TRUE    TRUE    TRUE    TRUE    TRUE
2   TRUE    FALSE   TRUE    TRUE    FALSE   TRUE
3   TRUE    TRUE    TRUE    TRUE    TRUE    TRUE
4   TRUE    TRUE    TRUE    TRUE    TRUE    TRUE
5   TRUE    TRUE    FALSE   TRUE    TRUE    TRUE
6   TRUE    TRUE    FALSE   TRUE    TRUE    TRUE
7   TRUE    TRUE    FALSE   TRUE    TRUE    TRUE
8   TRUE    TRUE    TRUE    FALSE   FALSE   FALSE
9   TRUE    TRUE    TRUE    TRUE    TRUE    TRUE
10  FALSE   FALSE   FALSE   TRUE    TRUE    TRUE
11  TRUE    TRUE    FALSE   TRUE    TRUE    TRUE
12  TRUE    TRUE    TRUE    TRUE    TRUE    FALSE

1 个答案:

答案 0 :(得分:3)

base R中会有一个更简单的选项

!is.na(df)

由于它是'tbl_df',我们也可以这样做

library(tdyverse)
df %>%
    mutate_all(negate(is.na))
#      X1    X2    X3    T1    T2    T3
#1   TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
#2   TRUE FALSE  TRUE  TRUE FALSE  TRUE
#3   TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
#4   TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
#5   TRUE  TRUE FALSE  TRUE  TRUE  TRUE
#6   TRUE  TRUE FALSE  TRUE  TRUE  TRUE
#7   TRUE  TRUE FALSE  TRUE  TRUE  TRUE
#8   TRUE  TRUE  TRUE FALSE FALSE FALSE
#9   TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
#10 FALSE FALSE FALSE  TRUE  TRUE  TRUE
#11  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
#12  TRUE  TRUE  TRUE  TRUE  TRUE FALSE

其他方法是

is.na(df) == FALSE # usually not done this way
df[] <- lapply(df, function(x) !is.na(x))
df[] <- !sapply(df, is.na)