【问题标题】:R - Select Elements from list that meet the criteriaR - 从列表中选择符合条件的元素
【发布时间】:2015-11-26 03:56:35
【问题描述】:

我很难从列表中选择满足某个功能的元素。因此,用解决方案记录相同的内容。

check.digits <- function(x){ grepl('^(\\d+)$' , x) }

x = "741 abc pqr street 71 15 41 510741"
lx = strsplit(x, split = " ", fixed = TRUE)
lapply(lx, check.digits)

这不起作用 -

lx[[1]][c(lapply(lx, check.digits))]

使用-

lx[[1]][sapply(lx, check.digits)]

谢谢!!!

【问题讨论】:

    标签: r list lapply sapply


    【解决方案1】:

    考虑到你所追求的,也许你应该只使用gregexpr + regmatches

    regmatches(x, gregexpr("\\d+", x))
    # [[1]]
    # [1] "741"    "71"     "15"     "41"     "510741"
    

    或者,从“qdapRegex”,使用rm_number

    library(qdapRegex)
    rm_number(x, extract = TRUE)
    # [[1]]
    # [1] "741"    "71"     "15"     "41"     "510741"
    

    或者,从“stringi”,使用stri_extract_all_regex

    library(stringi)
    stri_extract_all_regex(x, "\\d+")
    # [[1]]
    # [1] "741"    "71"     "15"     "41"     "510741"
    

    如果您只处理单个字符串并且只对单个向量感兴趣,请在末尾添加 [[1]]

    【讨论】:

    • 这样更快。谢谢
    【解决方案2】:

    使用

    lx[[1]][sapply(lx, check.digits)]
    [1] "741"    "71"     "15"     "41"     "510741"
    

    【讨论】:

    • 不需要那个sapply - lx[[1]][check.digits(lx[[1]])]
    • 想要发布这个答案?我使用的是 c(check.digits(lx[[1]]) 而不是简单的函数
    • 如果您愿意,只需将其编辑到您的答案中,我不需要声誉积分 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 2011-12-14
    相关资源
    最近更新 更多