替换多列中的值

问题描述

这是我的数据框:

ID <- 1:4
var1 <- c("yes","no","yes","no")
var2 <- c("no","no")
var3 <- c("yes","no")
data <- data.frame(ID,var1,var2,var3)

我想将所有yes替换为1,并将no替换为0,以便在下面有这样的表格

  ID var1 var2 var3
1  1    1    0    1
2  2    0    0    1
3  3    1    1    0
4  4    0    0    0

解决方法

一种解决方案是across()中的tidyverse

library(tidyverse)
#Data
ID<-1:4
var1<-c("yes","no","yes","no")
var2<-c("no","no")
var3<-c("yes","no")
#Code
data<-data.frame(ID,var1,var2,var3,stringsAsFactors = F)
#Solution
data %>%
  mutate(across(c(var1:var3),~ ifelse(.=='yes',1,0)))

输出:

  ID var1 var2 var3
1  1    1    0    1
2  2    0    0    1
3  3    1    1    0
4  4    0    0    0

一个base R解决方案将使用索引为yes / no的索引:

#Solution 2
data[data=='yes']<-1
data[data=='no']<-0
data[,-1] <- sapply(data[,-1],as.numeric)

输出:

  ID var1 var2 var3
1  1    1    0    1
2  2    0    0    1
3  3    1    1    0
4  4    0    0    0
,

一种androiddeployqt解决方案:

base
,

使用data.table

library(data.table)
setDT(data)[,(2:4) :=  lapply(.SD,function(x) as.integer(x == 'yes')),.SDcols = 2:4]