我有一个大文本文件(50,000行)我正在尝试删除重复项/从
中查找唯一的单词CSV中的行/字符串各不相同,因此三行可能如下所示:
I like cars
Ford
Cars go fast
我想先将每一行/字符串分开,然后将它们组合起来,以便我从上面得到以下列表:
I
like
cars
Ford
Cars
go
fast
一旦完成该列表,就应该很容易更改每个单词的大小写,然后删除重复项,留下文档中所有单词的唯一列表。
有些行是段落,因此Excel无法处理作业。我猜paste
和paste(unique())
可能有用,但我无法使用read.csv
以所需格式从文档中获取文字。
这些段落可能包括标点符号,数字和@等随机字符,因此可能需要首先转换字符串。
编辑:
3种方法有效,但结果不同,这里是csv的链接,任何有关结果不同的见解都将不胜感激。
答案 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)