首页 > 解决方案 > 将标点符号添加到 data.frame r 中的列表和 coreace

问题描述

我有一个单词和标点符号库。我正在尝试用它制作一个数据框,以便以后可以使用它。原始数据集有 2,000,000 行标点符号,但它是一个列表。我无法从其余单词中解析出列表中的标点符号。我想要单词中每个标点符号之间的空格。我可以很容易地在 excel 中找到替换。但是想在 R 中执行它。我有一个名为 = df 的示例,而我想要在 r 中的输出称为 = output。我附上了下面的代码和我到目前为止所拥有的。我尝试了 str_split ,但它删除了“How”并且没有返回任何“”。

#--------Upload 1st dataset and edit-------#
library("stringr")
sent1<-c("How did Quebec? 1 2 3")
sent2<-c("Why does valve = .245? .66")
sent3<-c("How do I use a period (.) comma [,] and hyphen {-} to columns?")
df <- data.frame(text = c(sent1,sent2,sent3))
df <- as.matrix(df)
str_split(df, " ")#spaces

#-------------output-------------#
words1<-c("How", "did" ,"Quebec"," ? ","1", "2" ,"3")
words2<-c('Why', "does", "valve"," = ",".245","?" ,".66")
words3<-c("How" ,"do", "I", "use", "a", "period", '(',".",')', "comma" ,'[',",","]" ,"and" ,"hyphen" ,"{","-",'}' ,"to" ,"columns",'?')
output<-data.frame(words1,words2,words3)

标签: rstringword

解决方案


这是一个完成工作的粗略概念:

首先拆分所有不是单词字符的字符(受另一个答案的启发)。然后获取最大长度并填写其他长度相同。

dfsplt <- strsplit( gsub("([^\\w])","~\\1~", df, perl = TRUE), "~")
dfsplt <- lapply(dfsplt, function(x) x[!x %in% c("", " ")])
n <- max(lengths(dfsplt))
sapply(dfsplt, function(x) {x <- rep(x, ceiling(n / length(x))); x[1:n]})
# or
sapply(dfsplt, function(x) x[(1:n - 1) %% length(x) + 1])

      [,1]     [,2]    [,3]     
 [1,] "How"    "Why"   "How"    
 [2,] "did"    "does"  "do"     
 [3,] "Quebec" "valve" "I"      
 [4,] "?"      "="     "use"    
 [5,] "1"      "."     "a"      
 [6,] "2"      "245"   "period" 
 [7,] "3"      "?"     "("      
 [8,] "How"    "."     "."      
 [9,] "did"    "66"    ")"      
[10,] "Quebec" "Why"   "comma"  
[11,] "?"      "does"  "["      
[12,] "1"      "valve" ","      
[13,] "2"      "="     "]"      
[14,] "3"      "."     "and"    
[15,] "How"    "245"   "hyphen" 
[16,] "did"    "?"     "{"      
[17,] "Quebec" "."     "-"      
[18,] "?"      "66"    "}"      
[19,] "1"      "Why"   "to"     
[20,] "2"      "does"  "columns"
[21,] "3"      "valve" "?"  

推荐阅读