我有这样的数据
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
答案 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)