dplyr变异将“否”转换为0,“是”转换为1
我有一个chr类型的列,我需要它作为布尔值,但将NAs保留为NAs。所需的转换为:否=0,是=1,NA=NAdplyr变异将“否”转换为0,“是”转换为1,r,dplyr,mutate,recode,R,Dplyr,Mutate,Recode,我有一个chr类型的列,我需要它作为布尔值,但将NAs保留为NAs。所需的转换为:否=0,是=1,NA=NA tmp <- tibble(x = 1:7, y = c("No", "Yes", NA, "Yes", "Yes", "Yes", "No")) 尤普差一点就成功了 tmp <- tmp %>% mutate(y=ifelse(is.na(y), y, y == "Yes")) 尤普差一点就成功了 tmp <- tmp %>% mutate(y=ife
tmp <- tibble(x = 1:7, y = c("No", "Yes", NA, "Yes", "Yes", "Yes", "No"))
尤普差一点就成功了
tmp <- tmp %>% mutate(y=ifelse(is.na(y), y, y == "Yes"))
尤普差一点就成功了
tmp <- tmp %>% mutate(y=ifelse(is.na(y), y, y == "Yes"))
我使用ifelse函数想出了一个快速而肮脏的修复方法
tmp <- tibble(x = 1:7, y = c("No", "Yes", NA, "Yes", "Yes", "Yes", "No"))
tmp_new <- as_tibble(ifelse(is.na(tmp) == T,NA, ifelse(tmp == "No",0,1)))
我使用ifelse函数想出了一个快速而肮脏的修复方法
tmp <- tibble(x = 1:7, y = c("No", "Yes", NA, "Yes", "Yes", "Yes", "No"))
tmp_new <- as_tibble(ifelse(is.na(tmp) == T,NA, ifelse(tmp == "No",0,1)))
您可以直接执行以下操作:
tmp$y <- +(tmp$y == 'Yes')
#similar to
#tmp$y <- as.integer(tmp$y == 'Yes')
tmp
# A tibble: 7 x 2
# x y
# <int> <int>
#1 1 0
#2 2 1
#3 3 NA
#4 4 1
#5 5 1
#6 6 1
#7 7 0
您可以直接执行以下操作:
tmp$y <- +(tmp$y == 'Yes')
#similar to
#tmp$y <- as.integer(tmp$y == 'Yes')
tmp
# A tibble: 7 x 2
# x y
# <int> <int>
#1 1 0
#2 2 1
#3 3 NA
#4 4 1
#5 5 1
#6 6 1
#7 7 0
这只是另一个解决方案,它在将来需要重新编码更多值时非常有用
library(dplyr)
tmp$y <- recode(tmp$y, "No" = 0, "Yes" = 1)
输出
# A tibble: 7 x 2
# x y
# <int> <dbl>
# 1 1 0
# 2 2 1
# 3 3 NA
# 4 4 1
# 5 5 1
# 6 6 1
# 7 7 0
这只是另一个解决方案,它在将来需要重新编码更多值时非常有用
library(dplyr)
tmp$y <- recode(tmp$y, "No" = 0, "Yes" = 1)
输出
# A tibble: 7 x 2
# x y
# <int> <dbl>
# 1 1 0
# 2 2 1
# 3 3 NA
# 4 4 1
# 5 5 1
# 6 6 1
# 7 7 0
另一个解决方案:
# base R style
tmp$y <- match(tmp$y, c("No","Yes")) - 1L
# tidyverse style
tmp <- tmp %>%
mutate(y = match(y, c("No","Yes")) - 1L)
两者都给出:
另一个解决方案:
# base R style
tmp$y <- match(tmp$y, c("No","Yes")) - 1L
# tidyverse style
tmp <- tmp %>%
mutate(y = match(y, c("No","Yes")) - 1L)
两者都给出:
这样行吗
tmp %>%
mutate(y = 1*(y=="Yes"))
# A tibble: 7 x 2
x y
<int> <dbl>
1 1 0
2 2 1
3 3 NA
4 4 1
5 5 1
6 6 1
7 7 0
这样行吗
tmp %>%
mutate(y = 1*(y=="Yes"))
# A tibble: 7 x 2
x y
<int> <dbl>
1 1 0
2 2 1
3 3 NA
4 4 1
5 5 1
6 6 1
7 7 0
从技术上讲,这会将“是”更改为1,将除NA之外的所有其他内容更改为“零”。这是真的。从技术上讲,这会将“是”更改为1,将除NA之外的所有内容更改为“零”。这是真的。只需将z更改为y,也会获得所需的结果哦,天哪!我从来没有发现过。只要把z改成y,你也会得到想要的结果哦,天哪!我都没注意到。