微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

找到与 R 中某个模式匹配的最近的前一个元素

如何解决找到与 R 中某个模式匹配的最近的前一个元素

给定这样一个向量:

c("node 1","primary","sports,improve","music,"painting,"surrogate","music","node 2","node 3",improve")

我想将每个“主要”及其对应节点下的每个名称作为单个字符串。例如:对于第一个节点,即上面向量中的第一个元素(“节点 1”),应该有三个输出:“节点 1 体育”、“节点 1 音乐”、“节点 1 绘画”。对于“节点 2”,应该有两个:“节点 2 音乐”、“节点 2 绘画”。数据比给定的向量大得多,因此索引和手动生成字符串不是首选。我最初的想法是用 grepl 找到每个包含“改进”的元素。我找不到将使用 grepl 找到的元素分配给其对应节点的方法

解决方法

根据'node'的出现次数创建一个组,得到逻辑向量的cumsumsplit将向量'v1'变成一个listpaste具有“改进”和 stack 的元素子串的第一个元素为两列 data.frame

stack(lapply(split(v1,cumsum(grepl('node',v1))),function(x) paste(x[1],sub(",.*","",x[grep('improve',x)]))))[2:1]

-输出

#  ind          values
#1   1   node 1 sports
#2   1    node 1 music
#3   1 node 1 painting
#4   2    node 2 music
#5   2 node 2 painting
#6   3   node 3 sports

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。