【问题标题】:FInd a character in a string in column in dataframe and give decisions in R在数据框中的列中查找字符串中的字符并在 R 中做出决定
【发布时间】:2015-09-23 15:00:24
【问题描述】:

我有以下格式的数据

     Loss        
--------------------------
     R0RKE         
     R0HKE         

我希望 R 脚本在应用逻辑后返回我:如果字符串中的第 3 个字符 是 'R' 则是,如果是 'H' 则否,否则留空

           Loss
--------------------------
           Yes
           No

【问题讨论】:

  • 试试ifelse(substr(df$Loss, 3,3)=='R', 'Yes', ifelse(substr(df$Loss, 3,3)=='H', 'No', ''))

标签: r substring


【解决方案1】:

正则表达式方式...

x <- c("RORKE","ROHKE", "FIVE")
ifelse(sub("^..(.).*", "\\1", x) == "R", "Yes", ifelse(sub("^..(.).*", "\\1", x) == "H", "No", " "))
# [1] "Yes" "No"  " "  

【讨论】:

    【解决方案2】:

    我们可以使用substr 和来自library(car)recode。我们使用substr 提取“损失”列中元素的第三个字符,然后使用recode 将“R”提取为“是”,将“H”提取为“否”,将所有其他字符提取为''

    library(car)
    recode(substr(df$Loss,3,3), "'R'='Yes'; 'H'='No'; else=''")
    #[1] "Yes" "No"  ""    "Yes" ""   
    

    或者base R 选项是substr/match/factor。我们用substr('v1')提取第三个字符,match用字母'R','H'得到数字索引('v2'),通过指定labels转换为factor对应的levels 并将其重新转换为character

    v1 <- substr(df$Loss,3,3)
    v2 <- match(v1, c('R', 'H'), nomatch=0)
    as.character(factor(v2, levels=0:2, labels=c('', 'Yes', 'No')))
    #[1] "Yes" "No"  ""    "Yes" ""   
    

    数据

    df <-  data.frame(Loss= c('RORKE', 'ROHKE', 'RODKE', 'RDRKD', NA))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多