解析数据框大文本列中的特定文本 - R
Parsing out particular text in a big text column in a Dataframe - R
假设我有以下数据,
data
text
abc/1234&
qwertyabc/5555&
a&sdfghabc/ppp&plksa&
z&xabc/lkjh&poiuw&
lkjqwefasrjabc/855698&plkjdhweb
例如,如果我想单独解析 abc/ 和首次出现的 & 之间的文本,我该如何解析这些文本之间的那些文本。我想要第一次出现 abc/ 和第一次出现 abc/ 之后 & 之间的文本。
我的输出应该如下,
数据
text parsed_out
abc/1234& 1234
qwertyabc/5555& 5555
a&sdfghabc/ppp&plksa& ppp
z&xabc/lkjh&poiuw& lkjh
lkjqwefasrjabc/855698&plkjdhweb 855698
以下是我的尝试,
data1 = within(data, FOO<-data.frame(do.call('rbind', strsplit(as.character(text), 'abc/', fixed=TRUE))))
data2 = within(data1, FOO1<-data.frame(do.call('rbind', strsplit(as.character(FOO$X1), '&', fixed=TRUE))))
这使用了太多内存,因为文本文件有 800 万行,而且 data2 会有多个列,因为它有多个“&”。谁能帮助我以最有效的方式将这两个字符之间的文本解析为仅一列,以免占用太多内存?
x = "thesearepresentinthestartingwhichisnotneededhttp://google.com/needstobeparsedout&reoccurencenotneeded&"
这里,函数应该检查 http://google.com/ 并解析直到找到第一个 &。这里的输出应该是needstobeparsedout。
new_x = "\"http://www.google.com/search?q=erykah+badu+with+hiatus+kaiyote,+august+3&""
为什么它不能使用这个 link?
谢谢
I actually wanted to parse out few parts of the URL and for example, I want to parse out, the text between "http:www.google.com/" and first occurrence of "&".
使用
sub(".*?https?://(?:www\.)?google\.com/([^&]+).*", "\1", x)
参见regex demo。
模式匹配:
- (可选择在前面加一个
^
来匹配字符串的开头位置)
.*?
- 从开始到第一个 尽可能少的 0+ 个字符
https?://
- https://
或 http://
后跟
(?:www\.)?
- 1 或 0(可选)序列 www.
google\.com/
- 文字 google.com
([^&]+)
- &
以外的 1 个或多个字符(捕获组 1)
.*
- 任何 0+ 个字符(直到字符串末尾)。
在替换模式中,
指的是捕获到组1中的潜台词。
假设我有以下数据,
data
text
abc/1234&
qwertyabc/5555&
a&sdfghabc/ppp&plksa&
z&xabc/lkjh&poiuw&
lkjqwefasrjabc/855698&plkjdhweb
例如,如果我想单独解析 abc/ 和首次出现的 & 之间的文本,我该如何解析这些文本之间的那些文本。我想要第一次出现 abc/ 和第一次出现 abc/ 之后 & 之间的文本。
我的输出应该如下,
数据
text parsed_out
abc/1234& 1234
qwertyabc/5555& 5555
a&sdfghabc/ppp&plksa& ppp
z&xabc/lkjh&poiuw& lkjh
lkjqwefasrjabc/855698&plkjdhweb 855698
以下是我的尝试,
data1 = within(data, FOO<-data.frame(do.call('rbind', strsplit(as.character(text), 'abc/', fixed=TRUE))))
data2 = within(data1, FOO1<-data.frame(do.call('rbind', strsplit(as.character(FOO$X1), '&', fixed=TRUE))))
这使用了太多内存,因为文本文件有 800 万行,而且 data2 会有多个列,因为它有多个“&”。谁能帮助我以最有效的方式将这两个字符之间的文本解析为仅一列,以免占用太多内存?
x = "thesearepresentinthestartingwhichisnotneededhttp://google.com/needstobeparsedout&reoccurencenotneeded&"
这里,函数应该检查 http://google.com/ 并解析直到找到第一个 &。这里的输出应该是needstobeparsedout。
new_x = "\"http://www.google.com/search?q=erykah+badu+with+hiatus+kaiyote,+august+3&""
为什么它不能使用这个 link?
谢谢
I actually wanted to parse out few parts of the URL and for example, I want to parse out, the text between "http:www.google.com/" and first occurrence of "&".
使用
sub(".*?https?://(?:www\.)?google\.com/([^&]+).*", "\1", x)
参见regex demo。
模式匹配:
- (可选择在前面加一个
^
来匹配字符串的开头位置) .*?
- 从开始到第一个 尽可能少的 0+ 个字符
https?://
-https://
或http://
后跟(?:www\.)?
- 1 或 0(可选)序列www.
google\.com/
- 文字google.com
([^&]+)
-&
以外的 1 个或多个字符(捕获组 1).*
- 任何 0+ 个字符(直到字符串末尾)。
在替换模式中,指的是捕获到组1中的潜台词。