在R中将多个列转换为二进制

时间:2017-04-03 20:51:04

标签: r binary

您好我有一个包含多个列的数据集,这些列填充了NA或" Y"。我希望分别使这些值为0和1。

我对R很新,并试图确定循环这些变量并重新编码的最佳方法。

STATE<-c(NA, "WA", "NY", NA, NA)  
x<-c(NA,"Y",NA,NA,"Y")
y<-c(NA,NA,"Y",NA,"Y")
z<-c("Y","Y",NA, NA, NA)
mydata<-data.frame(x,y,z)

我有一个大型数据集,其中有很多变量。但是,其中一些(如STATE),我希望独自离开。任何帮助将不胜感激。感谢。

3 个答案:

答案 0 :(得分:1)

您可以使用ifelse

ifelse(is.na(mydata),0,ifelse(mydata=="Y",1,mydata)

如果它们是NA,则将mydata的元素替换为0,如果它们是“Y”则替换为1,或者如果它们是其他的则保留元素。

您添加了二进制标记。 R有一个二进制类型:TRUE / FALSE,所以如果你想要二进制,你应该使用

 ifelse(is.na(mydata),FALSE,ifelse(mydata=="Y",TRUE,mydata)

代替。

答案 1 :(得分:1)

我认为最好的方法是使用包mutate_each()中的dplyr函数:

library(dplyr)

STATE  <- c(NA, "WA", "NY", NA, NA)  
x      <- c(NA, "Y", NA, NA, "Y")
y      <- c(NA, NA, "Y", NA, "Y")
z      <- c("Y", "Y", NA, NA, NA)
mydata <- data.frame(x, y, z, STATE)

mydata <- mutate_each(mydata, funs(ifelse(is.na(.), 0, 1)), -STATE)

它会将funs()内指定的函数应用于每个变量。点.是变量的表示。要跳过一个或多个变量,只需在其前面加上--var1, -var2, ...

答案 2 :(得分:0)

首先,您需要确保字符向量不被编码为因子:

mydata <- data.frame(x,y,z, stringsAsFactors=F)

然后:

mydata[mydata=="Y"] <- 1
mydata[is.na(mydata)] <- 0
mydata
  x y z
  1 0 0 1
  2 1 0 1
  3 0 1 0
  4 0 0 0
  5 1 1 0