我是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 :(得分: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
,我会使用lapply
和do.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