在名称之间放置逗号

2024-01-01

我试图找出数据框中是否出现某些模式。

假设我有以下“模式词典”(注意“james”与“jamesj”):

patterns <- c("john", "jack", "james", "jamesj", "jason")

我的实际数据框(“date_frame”)如下所示:

  id                                              names
1  1                                     johnjack jameS
2  2                             john/james, jasonjames
3  3                                    peter_jackjason
4  4                                   jamesjasonj jack
5  5 jamesjjason, johnjasonjohn , jason-jack sam _ peter

我试图产生的最终结果应该如下所示:

  id                                                         names
1  1                                             john, jack, james
2  2                                     john, james, jason, james
3  3                                            peter, jack, jason
4  4                                          jamesj, asonj,  jack
5  5 jamesj, jason, john, jason, john , jason, jack,  sam ,  peter

我尝试在这里查看这篇文章(R:在输出的每个元素后面插入逗号 https://stackoverflow.com/questions/56103591/r-insert-comma-after-each-element-from-the-output)并尝试了那里提供的答案:

> data_frame$parsed_names = dput(data_frame$names)



  id                                                         names                                                  parsed_names
1  1                                             john, jack, james                                             john, jack, james
2  2                                     john, james, jason, james                                     john, james, jason, james
3  3                                            peter, jack, jason                                            peter, jack, jason
4  4                                          jamesj, asonj,  jack                                          jamesj, asonj,  jack
5  5 jamesj, jason, john, jason, john , jason, jack,  sam ,  peter jamesj, jason, john, jason, john , jason, jack,  sam ,  peter

但这并不符合我想要的。

然后我在这里尝试了这篇文章(在 r 中的某些单词后面的文本字符串中插入逗号 https://stackoverflow.com/questions/54078683/insert-commas-in-text-string-after-certain-words-in-r)并尝试了那里提供的答案:

library(gsubfn)

data_frame$parsed_names = gsubfn("\\w+", as.list(setNames(paste0(patterns, ","), patterns)), 
  format(data_frame$names))

 data_frame
  id                                                         names                                                         parsed_names
1  1                                             john, jack, james     john,, jack,, james,                                            
2  2                                     john, james, jason, james    john,, james,, jason,, james,                                    
3  3                                            peter, jack, jason      peter, jack,, jason,                                           
4  4                                          jamesj, asonj,  jack      jamesj,, asonj,  jack,                                         
5  5 jamesj, jason, john, jason, john , jason, jack,  sam ,  peter jamesj,, jason,, john,, jason,, john, , jason,, jack,,  sam ,  peter
  • 有人可以告诉我如何解决这个问题吗?

谢谢你!


这是一个有点临时的答案,但它满足您的要求(没有变化patterns向量):

library(tidyverse)
patterns <- c("john", "jack", "james", "jamesj", "jason")

data_frame %>% 
  separate_rows(names) %>% 
  mutate(name = str_split(tolower(names), paste0("(?<=(", paste0(patterns, collapse = "|"), "))"))) %>% 
  unnest(name) %>% 
  filter(nzchar(name)) %>% 
  group_by(j = cumsum(!(name == "j"))) %>% 
  summarise(name = paste(name, collapse = ""),
            id = unique(id)) %>% 
  group_by(id) %>% 
  summarise(name = toString(name))

## A tibble: 5 × 2
#     id name                                                     
#  <dbl> <chr>                                                    
#1     1 john, jack, james                                        
#2     2 john, james, jason, james                                
#3     3 peter, jack, jason                                       
#4     4 jamesj, asonj, jack                                      
#5     5 jamesj, jason, john, jason, john, jason, jack, sam, peter

之前的回答:

在模式向量中添加其他可能的名称,并对向量重新排序,以便jamesj优先于james,然后您可以使用str_extract_all.

library(stringr)
library(dplyr)

patterns <- c("john", "jack", "jamesj", "james", "jason", "asonj", "peter", "sam")
patterns <- patterns[order(nchar(patterns), decreasing = T)]

data_frame %>% 
  mutate(names = lapply(str_extract_all(tolower(names), paste(patterns, collapse = "|")), toString))

#  id                                                     names
#1  1                                         john, jack, james
#2  2                                 john, james, jason, james
#3  3                                        peter, jack, jason
#4  4                                       jamesj, asonj, jack
#5  5 jamesj, jason, john, jason, john, jason, jack, sam, peter

data

data_frame <- tribble(
  ~id, ~names,
  1, "johnjack jameS",
  2, "john/james, jasonjames",
  3, "peter_jackjason",
  4, "jamesjasonj jack",
  5, "jamesjjason, johnjasonjohn , jason-jack sam _ peter"
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在名称之间放置逗号 的相关文章

  • R:表格格式

    我有一个包含以下列的 Excel 文件 Column1 Column2 Column3 ab bb 0 5 ab bc 0 1 ab cd 0 7 ab dd 0 8 ac bb 0 2 ac bg 0 8 ac ee 0 8 ac dd
  • R 中的字符串作为函数参数

    数据框chocolates列出了糖果的类型以及每种糖果的一组评级 ID sweetness filling crash snickers 0 67 0 55 0 40 milky way 0 81 0 53 0 56 我正在编写一个函数 它
  • 带 R 的多彩标题

    我想添加颜色某些词在我的图表标题中 我已经能够在这里找到一些先例 http blog revolutionanalytics com 2009 01 multicolor text in r html 具体来说 我希望用撇号括起来的文本 在
  • 正则表达式匹配bash变量

    我正在尝试修改 bash 脚本 当前脚本包含 print div class 1 div Where 1可能看起来像 Apprentice Historian Level 1 Historian Level 4 Master Histori
  • Javascript正则表达式用于字母字符和空格? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要一个
  • 如何从R arrow中的feather文件中读取列名和元数据?

    现已取代 独立R 的羽毛库 https github com wesm feather有一个函数叫做feather metadata 允许从磁盘上的羽毛文件中读取列名称和类型 而无需打开它们 当在 R 中加载羽毛文件时 这对于仅选择特定列很
  • 为什么 \K 似乎消耗了基本 R 的 gsub 中的一个字符

    这是一个示例字符串 bcadefgh 我希望我能匹配除了 cad 具有以下模式 wa w K w 如果我想替换所有不是的东西 cad 我可以用gsub 像这样gsub wa w K w bcadefgh perl TRUE 但是这输出 ca
  • 捕获段错误、内存未映射错误

    我试图在 R 中找到 1347 x 209974 矩阵的列的相关性 每次我这样做 使用一个简单的命令cor matrix 我收到消息 caught segfault address 0xffffffffd058abf8 cause memo
  • REGEX (javascript) - 允许字母数字字符和不在第一个位置的特殊字符

    我想设计一个正则表达式 允许使用字母数字字符以及其他字符 只要它们不在第一个位置即可 例子 VALID Test VALID Hello123 VALID 456 Hi VALID 456 789 VALID Hi 777 VALID 33
  • 在多行中打印带有列名称的 R 数据框

    我有一个带有长列名称的 R 数据框 所以当我打印数据框时它太宽了 有没有一种简单的方法可以将数据框打印到屏幕上 并且列名出现在多行中 我知道我可以缩短名字 但我不想这样做 当奥斯卡的答案被接受时 我想这可能真的是一个答案 不幸的是 这只是复
  • 使用 URL 参数 ID 编号范围进行 HTACCESS 重定向

    我希望有人可以提供帮助 因为事实证明这很难弄清楚 我试图通过 HTACCESS 和 mod rewrite 重定向许多 URL 参数 ID 值在特定范围内 从 1 到 7603 的页面 这是我到目前为止所拥有的
  • 是否存在永远不会匹配任何字符串的正则表达式? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • ggplot 直方图相对于轴的位置不正确

    我试图这样绘制直方图 Todo lo haremos con base en un variable aleatoria Uniforme 0 1 set seed 26 n 10000 U lt runif n n Supongamos
  • Python 正则表达式部分匹配或“hitEnd”

    我正在编写一个扫描器 因此我将任意字符串与正则表达式规则列表进行匹配 如果我可以模拟 Java hitEnd 功能 不仅知道正则表达式何时不匹配 还知道何时匹配 这将非常有用 can t匹配 当正则表达式匹配器在决定拒绝输入之前到达输入末尾
  • R 包与 Rcpp 的链接错误:“未定义符号:LAPACKE_dgels”

    我正在创建一个 R 包 lapacker 以使用 R API 头文件 R ext Lapack h 为 R 提供和使用的内部 LAPACK 库 仅具有双精度和双复数 提供 C 接口 源代码 https github com ypan1988
  • 在 Ubuntu Lucid 中从二进制安装 R 包

    我已经使用以下命令在 Ubuntu Lucid 中安装了 R sudo aptitude 安装 r base 当我尝试 install packages 时 它似乎会下载源代码 然后花费很长时间来编译它 我怎样才能像我在 Windows 上
  • 捕获 XSS(跨站脚本)攻击的最佳正则表达式(Java 中)?

    杰夫实际上在净化 HTML http refactormycode com codes 333 sanitize html 但他的示例是用 C 编写的 而我实际上对 Java 版本更感兴趣 有人有更好的 Java 版本吗 他的示例是否足以直
  • 我想找到 C# 代码中所有后面没有括号的 if 语句。通过正则表达式

    我想找到所有if声明和for后面没有大括号的语句 当你在一个文件中写入一行时if声明您大多不会将其括在大括号中 所以我想找到所有这些if and for声明 请帮忙 就像我想捕捉这个声明 if childNode Name B return
  • 如何一次导入多个 .csv 文件?

    假设我们有一个包含多个 data csv 文件的文件夹 每个文件包含相同数量的变量 但每个文件来自不同的时间 R 中有没有办法同时导入它们 而不必单独导入它们 我的问题是 我有大约 2000 个数据文件需要导入 并且必须使用以下代码单独导入
  • 使用 purrr、broom 从许多单变量模型中获得整洁的输出

    我有一个由二进制结果列组成的数据框 y 和多个独立的预测列 x1 x2 x3 我想运行许多单变量逻辑回归模型 例如y x1 y x2 y x3 并将每个模型的指数系数 比值比 95 置信区间和 p 值提取到数据框 标题的行中 在我看来 使用

随机推荐