1

我是 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

我想删除 list() 和 \" 但保留宗教名称并用逗号分隔它们。如何在 R 中执行此操作

4

1 回答 1

2

不确定您的数据结构,但这是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"

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

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

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

例如

#  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
于 2013-10-21T15:19:37.643 回答