给定这样一个向量:
c("node 1",
"primary",
"sports, improve",
"music, improve",
"painting, improve",
"surrogate",
"music",
"node 2",
"primary",
"music, improve",
"painting, improve",
"node 3",
"primary",
"sports, improve")
我希望将每个"primary“下的每个名称及其对应的节点作为单个字符串获取。例如:对于第一个节点,它是上面向量中的第一个元素("node 1"),应该有三个输出:“node 1 sports","node 1 music","node 1 painting”。对于“节点2”,应该有两个:“节点2音乐”,“节点2绘画”。数据比给定的向量大得多,所以不推荐索引和手动生成字符串。我最初的想法是用grepl找到每个包含"improve“的元素。我找不到一种方法来将grepl找到的元素分配给它对应的节点。
发布于 2021-03-16 20:21:02
根据‘cumsum
’的出现创建一个组,获取逻辑向量的节点,将向量'v1‘改进为一个节点,将具有’split
‘的元素子串的第一个元素改善,并将其stack
到一个两列的data.frame
stack(lapply(split(v1, cumsum(grepl('node', v1))),
function(x) paste(x[1], sub(",.*", "", x[grep('improve', x)]))))[2:1]
-output
# 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
https://stackoverflow.com/questions/66662789
复制