【问题标题】:How to turn a column of strings into a list of factors, filtering values with regex如何将一列字符串转换为因子列表,使用正则表达式过滤值
【发布时间】:2019-09-18 01:35:09
【问题描述】:

我有一个数据框,其中有一列 (A) 包含字符串,每个单词都用逗号分隔(仍然是一个字符串)。

   Df
   A                              B           etc.
   "String1, String2, etc."      ...          etc.

我想要

  1. 将 A 列中的观察结果转换为列表。该列表将包含元素字符串 1、字符串 2 等。

  2. 我想删除所有不是 8 个字符长的字符串,以 4 个数字开头并以 4 个数字结尾(我已经有正则表达式)

  3. 我想把所有的字符串都变成因数

最终产品应该是这样的

   Df
   A                              B           etc.
   [String1, String2, etc]       ...          etc.

做一些测试,我发现 strsplit() 和 str_subset 的组合满足要求 1 和 2

   var = "ABCD1234, ABCDEFGH"
   var = str_split(var, ", ")
   var = str_subset(var, "^[A-Za-z]{4}\\d{4}$")
   # Var = list("ABCD1234")

但我无法将其应用于数据框列。到目前为止,这还没有奏效

    df = df %>% mutate(
         A = strsplit(A, split = ", ")
         A = case_when(
             TRUE ~ str_subset(A, "^[A-Za-z]{4}\\d{4}$")
             )
         )

有人可以帮忙吗? 谢谢

【问题讨论】:

    标签: r regex


    【解决方案1】:

    我们可以将这两个步骤结合起来,首先在", " 上拆分字符串,然后使用str_subset 来获取遵循某种模式的字符串。

    library(tidyverse)
    df %>%
      mutate(new = str_split(A, ", "), 
             new = map(new, str_subset, pattern = "^[A-Za-z]{4}\\d{4}$"))
    
    #                   A                new
    #1 ABCD1234, ABCDEFGH           ABCD1234
    #2    AQD12345, AQWE1                   
    #3 ABCD1234, ABCD5678 ABCD1234, ABCD5678
    

    我们也可以在基础 R 中做到这一点

    df$new <- lapply(strsplit(df$A, ", "), grep, 
                     pattern = "^[A-Za-z]{4}\\d{4}$", value = TRUE)
    

    数据

    df <- data.frame(A = c("ABCD1234, ABCDEFGH", "AQD12345, AQWE1", 
                           "ABCD1234, ABCD5678"), stringsAsFactors = FALSE)
    

    【讨论】:

    • 你知道如何现在将字符串更改为因子吗?例如。 ["String1", "String2"] --> [String1, String2]。谢谢
    • @PatWong 你可以做df %&gt;% mutate(new = str_split(A, ", "), new = map(new, ~factor(str_subset(., "^[A-Za-z]{4}\\d{4}$"))))
    猜你喜欢
    • 2021-08-05
    • 2020-09-12
    • 1970-01-01
    • 2019-06-23
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 2017-07-02
    相关资源
    最近更新 更多