我有一长串字符串,它们共享子字符串。该列表来自事件流数据,因此有成千上万行,但我会简化这个例子;宠物:使用子字符串R查找字符串R
+--------------------------------+
| Pets |
+--------------------------------+
| "one calico cat that's smart" |
| "German Shepard dog" |
| "A Chameleon that is a Lizard" |
| "a cute tabby cat" |
| "the fish guppy" |
| "Lizard Gecko" |
| "German Shepard dog" |
| "Budgie Bird" |
| "Canary Bird in a coal mine" |
| "a chihuahua dog" |
+--------------------------------+
dput output: structure(list(Pets = structure(c(8L, 6L, 1L, 3L, 9L, 7L, 6L, 4L, 5L, 2L),.Label = c("A Chameleon that is a Lizard", "a chihuahua dog", "a cute tabby cat", "Budgie Bird", "Canary Bird in a coal mine", "German Shepard dog", "Lizard Gecko", "one calico cat that's smart", "the fish guppy"), class = "factor")), .Names = "Pets", row.names = c(NA, -10L), class = "data.frame")
我想基础上,通用型宠物(狗,猫等)添加信息,我有保留此信息一键表:
+----------+----------------+
| key | classification |
+----------+----------------+
| "dog" | "canine" |
| "cat" | "feline" |
| "lizard" | "reptile" |
| "bird" | "avian" |
| "fish" | "fish" |
+----------+----------------+
dput output: structure(list(key = structure(c(3L, 2L, 5L, 1L, 4L), .Label = c("bird", "cat", "dog", "fish", "lizard"), class = "factor"), classification = structure(c(2L, 3L, 5L, 1L, 4L), .Label = c("avian", "canine", "feline", "fish", "reptile"), class = "factor")), .Names = c("key", "classification"), row.names = c(NA, -5L), class = "data.frame")
怎么办我使用Pets
表中的“长字符串”在密钥表中查找相关的classification
?问题是,我的查找字符串包含在密钥表中找到的子字符串。
我用grepl这样开始:
key[grepl(pets[1,1], key[ , 2]), ]
但是,这是行不通的,因为“三色猫”是不是在键列表,虽然“猫”是。我正在寻找的结果将是“feline
”。 (注意:我不能简单地切换事物,因为在我自己的代码中,它位于一个apply函数中,并且循环遍历数据中的每一行。所以,而不是pets[1,1]
它是pets[n,1]
最后我打算cbind
对事件流数据的结果做进一步分析。)
我在绕包装如何做到这一点时遇到了麻烦。有什么建议?
看来,键总是每个“长字符串”的第二个字。这是一个合理的假设吗? – useR
不幸的是,没有。字符串有几个到几个不同的单词。我只知道“关键”字在那里。 – JoeM05
然后你应该提供一个不符合这个假设的长字符串。此外,请提供您的数据集,并将'dput(my_data)'的输出复制并粘贴到您的问题中,而不是您目前如何格式化它的数据集 – useR