您好我有一个包含多个列的数据集,这些列填充了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),我希望独自离开。任何帮助将不胜感激。感谢。
答案 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