根据 R 中包含大量垃圾文本的数据框中的特定条件选择多个条目

Selecting multiple entries based on a certain criteria from the dataframe with a lot of junk text in R

我有一个巨大的数据框,其中包含从 .csv 文件导入的数千行。虽然里面的文本是用逗号分隔的,但 R 将导入的数据框识别为单列(我的猜测是 - 由于其过于复杂和不规则的结构)。我想在每一行中搜索任何带有@符号(如@marine、@tested 等)的字符串,并将它们全部放入另一列。不幸的是,行的长度不同。

这是我的(2 行示例):

"254,""CC4qoAPgs0p"",""_ohc=l5OM-bXL0z4AX_eH6id&oh=246b0f63e5f90a14f28e0f9e40989372&oe=5F402F36"",""8"",""26793924834"",""How do you relax at night after a long day working? #doterra #doterraessentialoils @aromatherapy #essentialoils @terra #healthandwellness @terra @doterraoils2 #vegan #healthy #stressfree, 254a

"255,""DC4qDVhJRYH"",""_ohc=52ns_Li8iNQAX9wNlw6&oh=5c6b7f2193799aa6755b67ea6acec857&oe=5F41C4CA"",""12"",""37345461877""," "<U+0001F4F2> https://wa.me/60169573359  Anis Nadzirah Shaklee Independent Distributor Kuala @Berang  @shaklee %shaklee%lover, 255a

我想要这样的东西:

number       tags
254         @aromatherapy
            @terra
            @terra
            @doterraoils2

255         @Berang
            @shaklee

我尝试使用 data.table 包

library(data.table)
section <-  df[rownames(a) %like% "@", ]

但得到了相当奇怪的结果,在 10K 行中它只创建了 27 行。 有人可以帮我吗? 提前谢谢你。

引号碍事,需要删除。然后你需要一些正则表达式来提取以 @ 开头的术语。 这应该可以帮助您:我使用 readLines 读取数据并使用 stringr::str_replace_all 删除所有引号。第一个 lapply 提取以 @ 开头的单词(参见 ),第二个 lapply 提取 number。然后我们需要将事物组合成一个数据框。这可能可以进一步简化。

library(stringr)

data <- readLines("data_with_quotes.csv")
data <- str_replace_all(string = data, pattern = "\"", replacement  = "")

l <- lapply(data, FUN = function(x) str_extract_all(x, "(?<=^|\s)@[^\s]+"))
h <- lapply(data, FUN = function(x) str_sub(x, start = 1, end = 3))

df <- data.frame(matrix(unlist(l), nrow = length(l), byrow = T))
row.names(df) <- unlist(h)

有了这个输出:

> df
               X1      X2       X3
254 @aromatherapy  @terra   @terra
255 @doterraoils2 @Berang @shaklee