【问题标题】:ifelse argument returns index of variable instead of variable valueifelse 参数返回变量的索引而不是变量值
【发布时间】:2016-09-06 11:55:51
【问题描述】:

当 SSN 无效时,我正在尝试将 SSN 值替换为相应的 id 变量值。我拥有的代码将其替换为索引。这是一些示例数据和我的代码:

SSN <- data.frame(SSN = c("123-45-6789", "MR1-23-4567", "666786543", "800445678",
          "45678AB90", "77212345", "987654321", "234-56-7890", "123004567", "000345678"), 
id = c("3005", "3006", "3007", "3008", "3009", "3010", "3011", "3012", "3013", "3014" ))

SSN$SSN <- gsub('-','', SSN$SSN)
SSN$SSN <- ifelse(grepl('\\d{9}', SSN$SSN), SSN$SSN, SSN$id) 

这会导致:

       SSN   id
1 123456789 3005
2         2 3006
3 666786543 3007
4 800445678 3008
5         5 3009
6         6 3010

但我需要的是这个:

SSN   id
1 123456789 3005
2      3006 3006
3 666786543 3007
4 800445678 3008
5      3009 3009
6      3010 3010

任何帮助将不胜感激!提前致谢!

【问题讨论】:

  • 只需将SSN$id 转换为字符
  • @Sotos,这行得通!谢谢。

标签: r if-statement grepl


【解决方案1】:

SSN$id 的类是factor。取关卡以获得所需的输出。那就是:

SSN$SSN <- ifelse(grepl('\\d{9}', SSN$SSN), SSN$SSN, levels(SSN$id)) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 2016-04-03
    • 2015-02-01
    相关资源
    最近更新 更多