如何使用If-else?

时间:2019-08-23 07:24:22

标签: r

W3  W4  W5  W6  W7
9.4 NA  9.2 9.3 9.4
NA  NA  NA  9.1 9.0
NA  7.0 7.1 NA  7.2

我有这种数据,我想将每列中的NA更改为FALSE,我想知道他们报名的是哪一周,我的意思是如果他们不是NA,则他们报名了w3中的值的含义已注册,所以我想知道有多少个孩子注册了w3,w4,w5,w6,w7。如果他们参加了w3,我想在下周忽略。

2 个答案:

答案 0 :(得分:2)

您可以使用tidyrggplot(data = df, aes(x = variable, y = value, fill = id)) + geom_bar(stat = "identity", position = "dodge") + transition_states(show_time, wrap = F, transition_length = 5) + enter_fade() + enter_drift(x_mod = 0, y_mod = -max(df$value)) 替换为NA

选中此example

false

library(dplyr) df <- tibble(x = c(1, 2, NA), y = c("a", NA, "b"), z = list(1:5, NULL, 10:20)) df %>% replace_na(list(x = 0, y = "unknown")) df %>% mutate(x = replace_na(x, 0)) # NULL are the list-col equivalent of NAs df %>% replace_na(list(z = list(5))) df$x %>% replace_na(0) df$y %>% replace_na("false")
library(dplyr)

您可以在一列中找到NA的总和:df %>% replace(is.na(.), 'false')
第3周有多少孩子报名:sum(is.na(df$W3))

答案 1 :(得分:1)

您可以做到

df <- data.frame(
    colA = rep.int(x = 1, times = 3),
    colB = c(2, NA, 2),
    colC = c(3, NA, NA)
)

df_res <- sapply(X = df, FUN = function(x) {
    ifelse(is.na(x), FALSE, x)
})
df_res

请考虑您的列将属于numeric类,这意味着您的FALSE语句将表示为零。

sapply(df_res, class)
"numeric" "numeric" "numeric" "numeric" "numeric" "numeric" "numeric" "numeric" "numeric"

这是有问题的,因为您不知道0是实际的0还是FALSE

如果您坚持将"FALSE"值表示为字符串,则可以通过以下方式实现:

vapply(
    X = df,
    FUN = function(x) {
        ifelse(is.na(x), FALSE, as.character(x))
    },
    FUN.VALUE = character(length = 3)
)

# colA colB    colC   
# [1,] "1"  "2"     "3"    
# [2,] "1"  "FALSE" "FALSE"
# [3,] "1"  "2"     "FALSE"

这是有问题的,因为您必须将字符串转换为数字变量才能在该数据帧上进行任何计算。

推荐方法

如果您不需要过滤/过滤NA值,请使用is.na函数。您甚至可以反转它并创建便利功能:

is.not.na <- Negate(is.na)
is.not.na(c(NA, 1, 2, 3))
# [1] FALSE  TRUE  TRUE  TRUE