我使用Twitter API编制了推文数据集。
数据集基本上如下所示:
Data <- data.frame(
X = c(1,2),
text = c("Hello @User1 #hashtag1, hello @User2 and @User3, #hashtag2", "Hello @User2 #hashtag3, hello @User1 and @User3, #hashtag4"),
screenname = c("author1", "author2")
)
现在我想为社交网络分析创建一个data.frame
。我想说明每个屏幕名称(在本例中为“author1”等)如何链接到用户(“@ User1”等)和hashtags(“#hashtag1”等)。
为此,我需要从“text”列中提取/复制用户和主题标签,并将它们写入新列。 data.frame
应如下所示:
Data <- data.frame(
X = c(1,2),
text = c("Hello @User1 #hashtag1, hello @User2 and @User3, #hashtag2", "Hello @User2 #hashtag3, hello @User1 and @User3, #hashtag4"),
screenname = c("author1", "author2"),
U1 = c("@User1", "@User2"),
U2 = c("@User2", "@User1"),
U3 = c("@User3", "@User3"),
U4 = c("",""),
U5 = c("",""),
H1 = c("#hashtag1", "#hashtag3"),
H2 = c("#hashtag2", "#hashtag4"),
H3 = c("",""),
H4 = c("",""),
H5 = c("","")
)
如何从“文本”列中提取/复制此信息并将其写入新列?
答案 0 :(得分:1)
这是我使用stringi
包的简单尝试。此方法将创建列数量作为用户和hastags中最长的字符串,因此这将适用于任何数量的用户或提到的主题标签。这也非常有效,因为这个解决方案主要是矢量化的。
library(stringi)
Users <- stri_extract_all(Data$text, regex = "@[A-Za-z0-9]+")
Data[paste0("U", seq_len(max(sapply(Users, length))))] <- stri_list2matrix(Users, byrow = TRUE)
Hash <- stri_extract_all(Data$text, regex = "#[A-Za-z0-9]+")
Data[paste0("H", seq_len(max(sapply(Hash, length))))] <- stri_list2matrix(Hash, byrow = TRUE)
Data
# X text screenname U1 U2 U3 H1 H2
# 1 1 Hello @User1 #hashtag1, hello @User2 and @User3, #hashtag2 author1 @User1 @User2 @User3 #hashtag1 #hashtag2
# 2 2 Hello @User2 #hashtag3, hello @User1 and @User3, #hashtag4 author2 @User2 @User1 @User3 #hashtag3 #hashtag4