将字符串分成一个列表以删除重复项

Separating strings into one list to remove duplicates

我有一个很大的文本文件(50,000 行)我正在尝试从

中删除 duplicates/find 个独特的词

CSV 中的 rows/strings 有所不同,因此三行可能如下所示:

I like cars
Ford
Cars go fast

我想先将每个 row/string 分开,然后将它们组合起来,这样我就可以从上面得到以下列表:

I
like
cars
Ford
Cars
go 
fast

列表完成后,更改每个单词的大小写然后删除重复项应该很容易,留下文档中所有单词的唯一列表。

有些行是段落,因此 Excel 无法完成这项工作。我猜 pastepaste(unique()) 可能有用,但我无法使用 read.csv 以所需格式从文档中获取单词。

这些段落可能包含标点符号、数字和@等随机字符,因此可能需要先转换字符串。

编辑:

3 种方法有效,但结果不同,这里是 link 到 csv,任何关于为什么结果不同的见解都将不胜感激。

https://onedrive.live.com/redir?resid=61FAC513EBF4A4B9!296&authkey=!AMsiIuW4lCD_qrs&ithint=file%2ccsv

假设您将原始数据读入如下所示的数据框中:

df <- data.frame(s = c('I like cars', 'Ford', 'Cars go fast'), stringsAsFactors = FALSE)
df
             s
1  I like cars
2         Ford
3 Cars go fast

您可以按如下方式创建新的结果数据框:

newdf <- data.frame(words = unlist(strsplit(df$s, ' ')))
newdf
  words
1     I
2  like
3  cars
4  Ford
5  Cars
6    go
7  fast

为了拆分字符串,请看这里:

"How to Split Strings in R" 作者:R For Dummies 的 Andrie de Vries 和 Joris Meys http://www.dummies.com/how-to/content/how-to-split-strings-in-r.html

要在单词边界(空格)处拆分此文本,您可以按如下方式使用 strsplit():

strsplit(yourtext, " ")    # Split using spaces as boundaries

要查找列表中的独特元素,您可以使用 unique() 函数:

unique(strsplit(yourtext, " "))

所以结果中不会再有重复项了。

我们可以使用scan

df1 <- data.frame(words= unique(scan(text=as.character(df$s), what="", sep=" ")))
df1
#  words
#1     I
#2  like
#3  cars
#4  Ford
#5  Cars
#6    go
#7  fast

或者更快的方法是

library(stringi)
data.frame(words = unique(unlist(stri_extract_all(df$s, regex="\S+"))))

或使用 splitstackshape 中的 cSplit():

library(splitstackshape)
cSplit(df, 1, sep = " ", direction = "long")

#     V1
#1:    I
#2: like
#3: cars
#4: Ford
#5: Cars
#6:   go
#7: fast

为了方便起见,我会使用 stringr 包将所有单词放入一个字符向量中,如下所示:

tempdata <- read.csv("temp.csv",sep=",",skip=-1,stringsAsFactors=FALSE,header=FALSE)

library(stringr)

listrows <- str_split(tempdata$V1,pattern=" ")
allwords <- unlist(listrows)