str_extract_all返回一个列表,但我想要一个向量

时间:2016-02-22 02:42:35

标签: r stringr

这里的R还是比较新的。我有一列推文,我正在尝试创建一个包含转发句柄“RT @blahblah”的列,如下所示:

Tweets                            Retweetfrom
RT @john I had a good day         RT @john
RT @josh I had a bad day          RT @josh

这是我的代码:

r$Retweetfrom <- str_extract_all(r$Tweets, "^RT[:space:]+@[:graph:]+")

它给我的结果没问题,但是新列不是矢量,而是列表。当我尝试取消列表时,它会抛出一个错误:

Error in `$<-.data.frame`(`*tmp*`, "Retweetfrom", value = c("@AlpineITW", "@AllScienceGlobe",  : replacement has 1168 rows, data has 2306

任何人都知道如何处理这个问题?非常感谢。

2 个答案:

答案 0 :(得分:2)

如果我们对base R选项感兴趣,sub将非常有用

r$Retweetfrom <- sub(".*\\b(RT\\s+@[[:graph:]]+)\\s+.*", 
                         "\\1", r$Tweets)
r$Retweetfrom
#[1] "RT @john" "RT @josh"

答案 1 :(得分:1)

假设在Tweets列的每一行中只有一个RT @user(不是一个非常强大的假设),那么你可能只想要str_extract(它将对字符串进行矢量化) )不str_extract_all(每行可能返回多个结果)。即。

r$Retweetfrom <- str_extract(r$Tweets, "^RT[:space:]+@[:graph:]+")

在这种情况下,你会第一次提到RT @user,这可能是你想要的那个。