【问题标题】:Extract certain part from a string in R从R中的字符串中提取某些部分
【发布时间】:2021-04-02 23:18:11
【问题描述】:

我想提取字符串的一部分。这是一个示例数据集。

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_2ETC_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

有人知道吗?

谢谢!

【问题讨论】:

    标签: r string extract


    【解决方案1】:

    一个选项是使用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
    

    【讨论】:

      【解决方案2】:

      您可以使用正则表达式提取&lt;value&gt;&lt;/value&gt; 之间的所有内容。

      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
      

      【讨论】:

      • 感谢您的宝贵时间。由于您提出了所需提取部分的位置,因此该解决方案确实可以以不同的方式使用。谢谢!
      猜你喜欢
      • 2022-11-13
      • 1970-01-01
      • 2014-03-12
      • 2020-12-27
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多