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,我想在下周忽略。
答案 0 :(得分:2)
您可以使用tidyr将ggplot(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