2013-10-21 61 views
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 

我想删除列表()和\”但保持宗教名称和用逗号将它们分开。我怎样才能做到这一点R中

+0

您可以使用'dput'向我们展示您的实际代码的片段。你在那里得到的东西并没有为我们创造一个对象。 – Justin

+0

看看'?regex'。但是,目前尚不清楚你有什么样的想法。你只是想让它显示_没有引号?如果是这样,看看'cat(..)'和'print(..,quote = FALSE)' –

+1

你的数据看起来像'deparse'的输出,所以'parse'可能是解决方案... – James

回答

1

不知道你的数据的结构,但gsub wo这是一种方式去...

# Data 
str <- ":[email protected]#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) 

eg

# 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 
+1

非常感谢。首先,我使用df $ religion <-gsub(“list”,“”,df $ religion)删除所有“列表”,然后删除除逗号之外的所有符号。 – user2855907