【问题标题】:Convert multiple columns to binary in R在R中将多列转换为二进制
【发布时间】:2017-04-04 07:42:28
【问题描述】:

您好,我有一个包含多个列的数据集,这些列填充了 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),我想不理会。任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: r binary


    【解决方案1】:

    你可以使用ifelse:

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

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

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

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

    改为。

    【讨论】:

    • 有没有办法只对选定的变量执行此操作(请参阅编辑)?另外,我认为你是对的......二进制是我想要的。也就是说,如果它们在算术函数中解析为 1 和 0。 TRUE + TRUE 是否等于 2?
    • 如果您只想修改某些列,您可以执行类似mydata[c('x','y')] = ifelse(is.na(mydata[c('x','y')]),0,ifelse(mydata[c('x','y')]=="Y",1,mydata[c('x','y')]))where 的操作,其中包含您希望保留的列名。是的 TRUE+TRUE = 2
    【解决方案2】:

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

    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, ...

    【讨论】:

      【解决方案3】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 2023-02-03
        • 1970-01-01
        • 2021-09-09
        • 2015-05-13
        • 2013-04-25
        • 2021-07-12
        • 2014-11-07
        • 2021-10-13
        • 2022-01-20
        相关资源
        最近更新 更多