如何使用 case_when 和 mutate_all 来插入变量值
How to use case_when with mutate_all to insert variable value
我有一个看似很小的问题。我想结合使用 mutate_all()
和 case_when()
。示例数据框:
tbl <- tibble(
x = c(0, 1, 2, 3, NA),
y = c(0, 1, NA, 2, 3),
z = c(0, NA, 1, 2, 3),
date = rep(today(), 5)
)
我首先制作了另一个数据框,用以下代码将所有 NA 替换为零,将值替换为 1。
tbl %>%
mutate_all(
funs(
case_when(
. %>% is.na() ~ 0,
TRUE ~ 1
)))
现在我想用空格替换 NA 值 (""
) 并保留其他值。但是,我不知道如何以保留列值的方式设置 TRUE 值。
如有任何建议,我们将不胜感激!
要将 NA
保留为 ""
,我们可以使用 tidyr
中的 replace_na
library(dplyr)
library(tidyr)
tbl %>%
mutate_all(replace_na, "")
# A tibble: 5 x 3
# x y z
# <chr> <chr> <chr>
#1 0 0 0
#2 1 1 ""
#3 2 "" 1
#4 3 2 2
#5 "" 3 3
对于 case_when
或 if_else
,我们必须确保 type
是相同的。在这里,我们在插入 ""
时转换为 character
,因此请确保其他值也被强制转换为 character
class
tbl %>%
mutate_all(~ case_when(is.na(.) ~ "", TRUE ~ as.character(.)))
如果我们只想使用特定的列,那么我们可以使用mutate_at
tbl %>%
mutate_at(vars(x:y), ~ case_when(is.na(.) ~ "", TRUE ~ as.character(.)))
此外,为了简化OP的post中的代码,可以直接用as.integer
或+
强制转换为整数
tbl %>%
mutate_all(~ as.integer(!is.na(.)))
或者如果我们使用 case_when
tbl %>%
mutate_all(~ case_when(is.na(.)~ 0, TRUE ~ 1))
我有一个看似很小的问题。我想结合使用 mutate_all()
和 case_when()
。示例数据框:
tbl <- tibble(
x = c(0, 1, 2, 3, NA),
y = c(0, 1, NA, 2, 3),
z = c(0, NA, 1, 2, 3),
date = rep(today(), 5)
)
我首先制作了另一个数据框,用以下代码将所有 NA 替换为零,将值替换为 1。
tbl %>%
mutate_all(
funs(
case_when(
. %>% is.na() ~ 0,
TRUE ~ 1
)))
现在我想用空格替换 NA 值 (""
) 并保留其他值。但是,我不知道如何以保留列值的方式设置 TRUE 值。
如有任何建议,我们将不胜感激!
要将 NA
保留为 ""
,我们可以使用 tidyr
replace_na
library(dplyr)
library(tidyr)
tbl %>%
mutate_all(replace_na, "")
# A tibble: 5 x 3
# x y z
# <chr> <chr> <chr>
#1 0 0 0
#2 1 1 ""
#3 2 "" 1
#4 3 2 2
#5 "" 3 3
对于 case_when
或 if_else
,我们必须确保 type
是相同的。在这里,我们在插入 ""
时转换为 character
,因此请确保其他值也被强制转换为 character
class
tbl %>%
mutate_all(~ case_when(is.na(.) ~ "", TRUE ~ as.character(.)))
如果我们只想使用特定的列,那么我们可以使用mutate_at
tbl %>%
mutate_at(vars(x:y), ~ case_when(is.na(.) ~ "", TRUE ~ as.character(.)))
此外,为了简化OP的post中的代码,可以直接用as.integer
或+
tbl %>%
mutate_all(~ as.integer(!is.na(.)))
或者如果我们使用 case_when
tbl %>%
mutate_all(~ case_when(is.na(.)~ 0, TRUE ~ 1))