繁体   English   中英

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

[英]Convert multiple columns to binary in R

嗨,我有一个数据集,其中包含用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)不予理会。 任何帮助将不胜感激。 谢谢。

您可以使用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)

代替。

我认为最好的办法是使用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, ...加上-即可: -var1, -var2, ...

首先,您需要确保未将字符向量编码为因素:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM