gpt4 book ai didi

r - 如何将一列字符串转换为因子列表,使用正则表达式过滤值

转载 作者:行者123 更新时间:2023-12-04 12:07:46 27 4
gpt4 key购买 nike

我有一个数据框,其列 (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}$")
)
)

有人可以帮忙吗?谢谢

最佳答案

我们可以结合这两个步骤,首先在 ", " 上拆分字符串,然后使用 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

我们也可以在 base 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)

关于r - 如何将一列字符串转换为因子列表,使用正则表达式过滤值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57983877/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com