删除除逗号之外的所有符号

时间:2013-10-21 14:58:44

标签: r string

我是R的初学者。我有一个data.frame看起来像这样:

religion
list(\"christian\"),list()                                   
list(\"jewish\"),list()                                                                             
list(\"christian\"),list(\"catholic\", \"episcopal\")        
list(\"christian\"),list(\"evangelical\", \"lutheran\")       
list(\"christian\"),list(\"evangelical\", \"lutheran\")
....

此向量的类型为chr 这就是我想要的:

religion
christian
jewish
christian, catholic, episcopal
christian, evangelical, lutheran
christian, evangelical, lutheran

我想删除列表()和\“,但保留宗教名称并用逗号分隔。我怎样才能在R

中执行此操作

1 个答案:

答案 0 :(得分:1)

不确定数据的结构,但gsub是一种解决此问题的方法......

#  Data
str <- ":215H@#e5.:l[l[}o%^&*3,-7 55W(o]]43r6759l::~!1d424`$£"
#  Remove everything except spaces, commas and letters
gsub( "[^,a-zA-Z\\s]" , "" , str , perl = TRUE )
#[1] "Hello, World"

匹配除逗号,空格和小写和大写字母之外的任何字符。请记住,这会将逗号留在它们出现在文本中,而不仅仅是在单词边界之间。

如果您需要将其应用于data.frame每列并返回data.frame,我会使用lapplydo.call(在下面的示例中,我假设您的data.frame被称为mydf)...

clean <- lapply( mydf , gsub , pattern = "[^,a-zA-Z\\s]" , replacement = "" , perl = TRUE )
clean.df <- do.call( data.frame , clean )

e.g。

#  Make a data.frame with text containing punctuation
x <- rep( str , 4 )
mydf <- data.frame( a = x , b = x , c = x )

#  List of clean columns
clean <- lapply( mydf , gsub , pattern = "[^,a-zA-Z\\s]" , replacement = "" , perl = TRUE )

#  Coerce to data.frame
do.call( data.frame , clean )
#             a            b            c
#1 Hello, World Hello, World Hello, World
#2 Hello, World Hello, World Hello, World
#3 Hello, World Hello, World Hello, World
#4 Hello, World Hello, World Hello, World