在R语言中提取符号后的文本

22
sample1 = read.csv("pirate.csv")
sample1[,7] 
[1] >>xyz>>hello>>mate 1
[2] >>xyz>>hello>>mate 2
[3] >>xyz>>mate 3
[4] >>xyz>>mate 4
[5] >>xyz>>hello>>mate 5
[6] >>xyz>>hello>>mate 6

我需要提取并创建一个数组,其中包含最后一个>>之后的所有单词。

如何做到这一点?

另外,我该如何从以下字符串中分别提取(a)o qwerty,(b)mate1和(c)pirate1到不同的变量中?

p= '>>xyz- o qwerty>>hello>>mate1>>sole pirate1'

谢谢


为什么有一个 r 标签?在 R 和 Excel 中都需要吗? - Sotos
是的,我需要从Excel文件中提取一列数据并以向量形式导入到R中。 - Looper
1
请查看 read.csv 函数的参数 header 和 nrows。这将帮助您开始阅读。关于此问题,Stack Overflow 上有很多相关的提问。 - lmo
你想要始终提取最后一个词还是仅提取“ahoy”后面的词? - cdeterman
这并不是最后一个单词或者"ahoy"之后的单词...我的动机是从字符串中提取特定的单词,比如从字符串中提取"stuff data"。">>hello1>>hola1>>ahoy xyz stuff data mate1" - Looper
这就是为什么最好使用可重复的示例。看一下read.csv(在将Excel文件保存为.csv后)并在r中使用dput生成示例。还可以查看此链接 - Sotos
2个回答

32
x <- c('>>xyz>>hello>>mate 1', '>>xyz>>hello>>mate 2', '>>xyz>>mate 3', ' >>xyz>>mate 4' ,'>>xyz>>hello>>mate 5')
sub('.*>>', '', x)
#[1] "mate 1" "mate 2" "mate 3" "mate 4" "mate 5"

1
  1. 我该如何将整个列传递到向量中(因为这只有6行,但我正在处理超过100行)。
  2. 我还想提取两个特定符号之间的文本,例如:
xyz-qwerty>>hello>>mate1>>pirate1
在上面的例子中,我想要分别提取qwerty和hello并存储到不同的变量中。请帮我解决这个问题。谢谢
- Looper
好的,要选择单独的列,然后将“x”替换为“sample1 $…”或“sample1 [,7]”。要提取其他术语,您需要更新您的问题并提供更多详细信息。 - Sotos
这样怎么样:gsub('.* ', "", unlist(strsplit(p, '>>'))) - Sotos
它给我返回了这样的结果:["" "" "" "pirate1"] - Looper
1
它应该给你这个:[1] "" "qwerty" "hello" "mate1" "pirate1" - Sotos
可以使用 str_replace_all(x, ".*>>","") - Nick

8

假设您已经将那些数据读入到R数据框中,您可以使用stringr包来进行如下操作:

library(stringr)
str_extract(df$mystring, '\\S+$')

例如,如果您有这样的字符串:
s <- '>>hello1>>hola1>>ahoy mate1'

您将获得:

str_extract(s, '\\S+$')
[1] "mate1"

但我认为他的问题还涉及到在R中导入数据... - Sotos
2
是的。同意。我引导人们使用通用的程序包,以便在不同的问题上根据需要做更多的事情。 - Gopala
1
在你的例子中,最后一个>>之后的所有单词应该是ahoy mate1。 - rawr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接