问题描述
这是我的数据框:
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]