从数据框中的因子中删除双引号

时间:2018-11-06 08:38:01

标签: r regex gsub

我有一个数据框来处理我在哪里有很多变量作为引号中的变量,例如""x1""

str(df)给了我这样的东西:

$ x : Factor w/ 10 Levels "\"\"x1\"\"",..: 1 7 9 ...

我尝试使用gsub()函数消除引号,但是没有用。可能是因为我不知道要作为模式插入什么?如果有人可以解决这个难题,并且可能向我解释"\"\"x1\"\""是否可以解决这个问题,那会很好吗?

数据框的示例如下:

structure(list(Sent = structure(c(2L, 2L, 2L, 2L, 2L), .Label = c("\"\"Opted out\"\"", 
"\"\"Yes\"\""), class = "factor"), Responded = structure(c(2L, 
2L, 2L, 2L, 2L), .Label = c("\"\"Complete\"\"", "\"\"No\"\"", 
"\"\"Partial\"\""), class = "factor")), row.names = c(NA, -5L
), class = c("tbl_df", "tbl", "data.frame"), .Names = c("Sent", 
"Responded"))

谢谢!

1 个答案:

答案 0 :(得分:5)

vec = c('""x1""', '""x2""', '""x3""')
vec =  factor(vec)

levels(vec) <- gsub('["\\]', "", levels(vec))

#> vec
#[1] x1 x2 x3
#Levels: x1 x2 x3

  • 看看当我想在字符串中使用'时如何使用"作为包装器。

  • 另一个对您不起作用的问题可能是因为您没有使用level属性,而是使用了因子变量本身。

  • 因子变量在内部存储为1, 2, 3,...数字。

现在,您已经提供了数据,可以使用:(df1是包含因子列的数据)

df1[] <- lapply(df1, function(vec){ levels(vec) <- gsub('["\\]',"",levels(vec)); vec})