R 替换多列中的值

R 替换多列中的值,r,dataframe,replace,R,Dataframe,Replace,这是我的数据框: ID <- 1:4 var1 <- c("yes","no","yes","no") var2 <- c("no","no","yes","no") var3 <- c("yes","yes","no","no") d

这是我的数据框:

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

一种解决方案是从
tidyverse
中选择
cross()

library(tidyverse)
#Data
ID<-1:4
var1<-c("yes","no","yes","no")
var2<-c("no","no","yes","no")
var3<-c("yes","yes","no","no")
#Code
data<-data.frame(ID,var1,var2,var3,stringsAsFactors = F)
#Solution
data %>%
  mutate(across(c(var1:var3), ~ ifelse(.=='yes', 1, 0)))
基本R
解决方案将使用带有值yes/no的索引:

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

一种解决方案是从
tidyverse
中选择
cross()

library(tidyverse)
#Data
ID<-1:4
var1<-c("yes","no","yes","no")
var2<-c("no","no","yes","no")
var3<-c("yes","yes","no","no")
#Code
data<-data.frame(ID,var1,var2,var3,stringsAsFactors = F)
#Solution
data %>%
  mutate(across(c(var1:var3), ~ ifelse(.=='yes', 1, 0)))
基本R
解决方案将使用带有值yes/no的索引:

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

一个
base
解决方案:

cbind(data[1], +(data[-1] == "yes"))

#   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
解决方案:

cbind(data[1], +(data[-1] == "yes"))

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

使用
数据表

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

使用
数据表

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

谢谢你@Darren Tsai谢谢你@Darren Tsai