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

时间:2016-05-17 13:21:24

标签: r string list duplicates read.csv

我有一个大文本文件(50,000行)我正在尝试删除重复项/从

中查找唯一的单词

CSV中的行/字符串各不相同,因此三行可能如下所示:

I like cars
Ford
Cars go fast

我想先将每一行/字符串分开,然后将它们组合起来,以便我从上面得到以下列表:

I
like
cars
Ford
Cars
go 
fast

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

有些行是段落,因此Excel无法处理作业。我猜pastepaste(unique())可能有用,但我无法使用read.csv以所需格式从文档中获取文字。

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

编辑:

3种方法有效,但结果不同,这里是csv的链接,任何有关结果不同的见解都将不胜感激。

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

5 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

为了分割字符串,请看一下:

“如何拆分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, " "))

因此结果中不会再出现重复。

答案 2 :(得分:1)

我们可以使用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+"))))

答案 3 :(得分:1)

或使用cSplit()中的splitstackshape

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

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

答案 4 :(得分:1)

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

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

library(stringr)

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