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