从R中的字符串中提取特定部分
Extract certain part from a string in R
我想提取字符串的一部分。这是一个示例数据集。
df <- data.frame(id = c(1,2),
string = c('<itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_2</value>',
'<itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_4</value>'))
> df
id string
1 1 <itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_2</value>
2 2 <itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_4</value>
我想从长字符串中提取 ETC_CHOICE_2
和 ETC_CHOICE_4
。我想要的输出是:
> df
id string extract
1 1 <itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_2</value> ETC_CHOICE_2
2 2 <itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_4</value> ETC_CHOICE_4
有人知道吗?
谢谢!
一个选项是使用 XML
中的 htmlParse
library(XML)
library(dplyr)
df %>%
mutate(extract = htmlParse(string) %>%
getNodeSet("//value") %>%
xmlValue)
-输出
#id string extract
#1 1 <itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_2</value> ETC_CHOICE_2
#2 2 <itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_4</value> ETC_CHOICE_4
您可以使用正则表达式提取 <value>
和 </value>
之间的所有内容。
df$extract <- sub('.*<value>(.*)</value>', '\1', df$string)
df
# id string extract
#1 1 <itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_2</value> ETC_CHOICE_2
#2 2 <itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_4</value> ETC_CHOICE_4
我想提取字符串的一部分。这是一个示例数据集。
df <- data.frame(id = c(1,2),
string = c('<itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_2</value>',
'<itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_4</value>'))
> df
id string
1 1 <itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_2</value>
2 2 <itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_4</value>
我想从长字符串中提取 ETC_CHOICE_2
和 ETC_CHOICE_4
。我想要的输出是:
> df
id string extract
1 1 <itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_2</value> ETC_CHOICE_2
2 2 <itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_4</value> ETC_CHOICE_4
有人知道吗?
谢谢!
一个选项是使用 XML
htmlParse
library(XML)
library(dplyr)
df %>%
mutate(extract = htmlParse(string) %>%
getNodeSet("//value") %>%
xmlValue)
-输出
#id string extract
#1 1 <itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_2</value> ETC_CHOICE_2
#2 2 <itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_4</value> ETC_CHOICE_4
您可以使用正则表达式提取 <value>
和 </value>
之间的所有内容。
df$extract <- sub('.*<value>(.*)</value>', '\1', df$string)
df
# id string extract
#1 1 <itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_2</value> ETC_CHOICE_2
#2 2 <itemResponse><response id="editIn_1.RESPONSE_1"><value>ETC_CHOICE_4</value> ETC_CHOICE_4