【发布时间】:2014-04-27 04:27:01
【问题描述】:
我觉得这可能是一个简单的问题,但我已经通过 SO 搜索了一段时间,发现了许多有趣的相关 Q/A,我仍然很难过。
这是我需要学习的内容(老实说,我正在玩 kaggle Titanic 数据集,但我想使用 data.table)...
假设您有以下 data.table:
dt <- data.table(name=c("Johnston, Mr. Bob", "Stone, Mrs. Mary", "Hasberg, Mr. Jason"))
我希望我的输出只是标题“先生”、“夫人”和“先生”。 -- 哎呀,我们也可以省略句号。
我一直在玩(整晚),发现使用正则表达式可能会得到答案,但我只能让它在单个字符串上工作,而不是在整个 data.table 上工作。
例如,
substr(dt$name[1], gregexpr(",.", dt$name[1]), gregexpr("[.]", dt$name[1]))
返回:
[1] ", Mr."
这很酷,我可以做一些进一步的处理来摆脱“,”和“。”,但是,我的乐观主义者(/优化器)觉得这很丑陋、粗暴和低效。
此外,即使我想解决这个问题,(承认我很痛苦)我不知道如何将它应用到 data.table 的 J....
那么,如何在 dt 中添加一个名为“Title”的列,其中包含:
[1] "Mr"
[2] "Mrs"
[3] "Mr"
我坚信,如果我能够使用正则表达式在 data.table 中选择和提取数据,我可能会每天使用 100 次。所以提前感谢你帮助我找出这个关键技术。
PS。我是 excel 难民,在 excel 中我会这样做:
=mid(data, find(", ", data), find(".", data))
【问题讨论】:
-
注意,我发现以下网站很有帮助:regexr.com 它可以让您使用带有示例文本的正则表达式。
标签: string r data.table