【发布时间】:2022-07-04 13:06:05
【问题描述】:
我正在尝试找出某些模式是否出现在数据框中。
假设我有以下“模式字典”(注意“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: 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
但这不符合我想要的。
然后我在这里(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
- 谁能告诉我如何解决这个问题?
谢谢!
【问题讨论】:
-
有些元素,例如'sam' 不在模式中。你想保持原样吗?
-
是的——没错!
-
从起始列到您想要的输出的规则是非常不清楚的。对于将来对其他人有帮助的问题,澄清您想要的转换会很有用:例如:用
,替换特殊字符,在模式中存在的单词之间添加,等。 -
为什么不将
jamesjasonj拆分为james, jason, j,因为james和jason在patterns中? -
在您想要的输出中,您是否真的打算在最后一行的
john ,和sam ,中有额外的空间,或者这是一个错字?