首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从R中的非结构化数据集中筛选出一个特定短语并将其放入一个新的数据框架中

如何从R中的非结构化数据集中筛选出一个特定短语并将其放入一个新的数据框架中
EN

Stack Overflow用户
提问于 2020-10-17 09:35:28
回答 1查看 219关注 0票数 0

我正在清理一个大的非结构化数据--实际上是一个代码页。我需要从这段代码中提取一个特定的短语,从

以下是.txt文件中的示例数据。我需要查找

代码语言:javascript
复制
</bi:data_source_alias>
    <bi:component name="ROOT" type="ABSOLUTE_LAYOUT_COMPONENT">
        <bi:component name="CHART_1" type="com_sap_ip_bi_VizFrame">
            <bi:property name="LEFT_MARGIN" value="31"/>`       <bi:property name="TOP_MARGIN" value="64"/>
<bi:component name="SCORECARD_1" type="com_sap_ip_bi_Scorecard">
            <bi:property name="LEFT_MARGIN" value="9"/>

这就是我到目前为止所做的。

  1. 将整个.txt文件读入名为df1的数据框架
  2. 然后,我使用以下命令在df1上应用了过滤器 comp_type <- df1 %>% filter(str_detect(str_to_lower(Value),"\图像显示数据帧 但是上面的命令出错了。 UseMethod中的错误(“filter_”):没有适用于“c(‘矩阵’,‘逻辑’)类对象的'filter_‘的方法 我参考了下面的帮助链接,并参考了其他几个站点,但无法获得所需的输出。如果你能帮我正确的命令过滤这个词并把它放到一个新的领域里,那就太好了。 R dplyr筛选器基于匹配搜索项和选定列中任何工作的第一个单词
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-17 11:11:17

如果您想要将包含type描述的新列type添加到包含post中给出的大字符串的现有dataframe df中,则应该可以:

解决方案:

代码语言:javascript
复制
df$component <- str_extract_all(df$v1, '(?<=bi:component name="\\w{1,100}" type=")[^"]+')

这利用了(?<=...)的正向查找,以及\\w不仅匹配字母,还匹配数字和下划线的事实,这些都与bi:component name的值有关。

结果:

代码语言:javascript
复制
df
v1
1 </bi:data_source_alias>\n    <bi:component name="ROOT" type="ABSOLUTE_LAYOUT_COMPONENT">\n        <bi:component name="CHART_1" type="com_sap_ip_bi_VizFrame">\n            <bi:property name="LEFT_MARGIN" value="31"/>`       <bi:property name="TOP_MARGIN" value="64"/>\n<bi:component name="SCORECARD_1" type="com_sap_ip_bi_Scorecard">\n            <bi:property name="LEFT_MARGIN" value="9"/>
                                                                   component
1 ABSOLUTE_LAYOUT_COMPONENT, com_sap_ip_bi_VizFrame, com_sap_ip_bi_Scorecard

数据:

代码语言:javascript
复制
df <- data.frame(
  v1 = '</bi:data_source_alias>
    <bi:component name="ROOT" type="ABSOLUTE_LAYOUT_COMPONENT">
        <bi:component name="CHART_1" type="com_sap_ip_bi_VizFrame">
            <bi:property name="LEFT_MARGIN" value="31"/>`       <bi:property name="TOP_MARGIN" value="64"/>
<bi:component name="SCORECARD_1" type="com_sap_ip_bi_Scorecard">
            <bi:property name="LEFT_MARGIN" value="9"/>'
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64401020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档