【问题标题】:Match character vector in a dataframe with another character vector and trim character将数据框中的字符向量与另一个字符向量匹配并修剪字符
【发布时间】:2018-12-05 19:22:43
【问题描述】:

这是一个数据框和一个向量。

df1  <-  tibble(var1 = c("abcd", "efgh", "ijkl", "qrst"))

vec <-  c("abcd", "mnop", "ijkl")

现在,对于 var1 中与 vec 中的值匹配的所有值,仅保留 var1 中的前 3 个字符,以便所需的解决方案是:

df2 <- tibble(var1 = c("abc", "efgh", "ijk", "qrst"))

由于“abcd”匹配,我们只保留 3 个字符,即 df2 中的“abc”,但 vec 中不存在“efgh”,所以我们保持原样,即 df2 中的“efgh”。

我如何使用 dplyr 和/或 stringr 来完成这项工作?

【问题讨论】:

    标签: r dplyr tidyverse stringr


    【解决方案1】:

    您可以只使用%in% 来检查字符串是否在向量中,并使用substr 来修剪向量:

    df1 %>% 
        mutate(var1 = ifelse(var1 %in% vec, substr(var1, 1, 3), var1))
    
    # A tibble: 4 x 1
    #  var1 
    #  <chr>
    #1 abc  
    #2 efgh 
    #3 ijk  
    #4 qrst
    

    【讨论】:

    • 我看到它在过滤器中的使用,但没有意识到它也可以在变异中使用。谢谢!
    • case_when df1 %&gt;% mutate(var1 = case_when(var1 %in% vec ~ str_sub(var1, 1, 3), TRUE ~ var1))
    • @akrun,先生,你摇滚,你应该发布它作为我会说的答案。
    • @RavinderSingh13 Ravinderji 谢谢。它与 Psidom 的帖子非常相似。所以,我会把它留作评论\
    猜你喜欢
    • 2021-12-16
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    相关资源
    最近更新 更多