【问题标题】:How to convert NA's in a large dataset to either 0 or 1?如何将大型数据集中的 NA 转换为 0 或 1?
【发布时间】:2012-03-23 09:39:37
【问题描述】:

这是我的数据框的 sn-p:

MemberID      Specialty                   Surgery          Internal
1 42286978     Surgery                      NA               NA
2 97903248     Internal                     NA               NA
3 2759427      Internal                     NA               NA      
4 73570559     Surgery                      NA               NA

在手术和内部栏下,我想用 0 或 1 替换 NA,1 表示是,0 表示否。这是一个非常大的数据集,我更愿意使用 r 中的工具或函数来执行此操作。

下表是我希望达到的。

    MemberID    Specialty                 Surgery          Internal
1  42286978     Surgery                      1                0
2  97903248     Internal                     0                1
3   2759427     Internal                     0                1  
4  73570559     Surgery                      1                0

如果有任何帮助,我将不胜感激。

【问题讨论】:

    标签: r function binary dataset


    【解决方案1】:

    我建议从MemberIDSpecialty 单独开始,并使用一些ifelse 语言。

    如果手术和内科互斥,您只需要一个新变量,因为第二个变量为您提供完全相同的信息(医生是外科医生还是从事内科工作)。

    将您的数据设为data.frame,名为specialty.data,然后试试这个:

    specialty.data$Surgery <- ifelse( specialty.data$Specialty == "Surgery", 1, 0 )
    

    希望这会有所帮助!

    【讨论】:

    • 这真的和chl的回答有什么不同吗?
    • 这个方法很好用,谢谢,我需要在这个方法中加入很多变量
    • 很高兴为您提供帮助!如果您觉得有帮助,请记得采纳答案。
    【解决方案2】:

    假设这是一个名为 dfrm 的数据帧

    dfrm$Surgery <- 0 + (dfrm$Specialty=="Surgery")
    dfrm$Internal <- 0 + (dfrm$Specialty=="Internal")
    

    【讨论】:

    • 我对 as.numeric(x) 的计算机科学棘手 0+x 有一个温和的偏好,以强制转换为数字......我认为涉及 model.matrix(~Specialty-1,data=dfrm) 的东西也可能有用(它会更多值得拥有更多类别)
    • 也许我们应该在我们的工作空间中定义一个%0/1%二元函数?
    【解决方案3】:

    假设你的数据框被命名为dfrm,你的意思是这样的吗?

    dfrm$Surgery <- ifelse(dfrm$Specialty=="Surgery", 1, 0)
    dfrm$Internal <- ifelse(dfrm$Specialty=="Internal", 1, 0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 2018-02-23
      • 1970-01-01
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 2021-10-15
      相关资源
      最近更新 更多