如何解决找到与 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'的出现次数创建一个组,得到逻辑向量的cumsum
,split
将向量'v1'变成一个list
,paste
具有“改进”和 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 举报,一经查实,本站将立刻删除。