删除数据框中的部分字符串

时间:2016-08-31 15:22:46

标签: regex r gsub

我努力删除"D_1__"中的字符串"D_2__""D_3__"data.frame等,同时保留后续文本,即输入:{ {1}}输出:"D_1__succeeding text"

我试过

"succeeding text"

但没有改变

此外,导入的df <- gsub("D_.__", "", df) 的列是data.frame,其中包含多个级别。这可能导致问题,如何转换factors

非常感谢你的帮助!

3 个答案:

答案 0 :(得分:1)

您面临两个问题:gsub旨在处理字符向量,而不是整个数据框,并且您还处理因子而不是字符向量。

我不确定您是如何导入数据的,但您可能可以选择使用stringsAsFactors = FALSE来阻止字符串首先作为因素被读取,例如:对于CSV数据:

df <- read.csv('mydata.csv', stringsAsFactors = FALSE)

或者,您可以将因子转换为字符串:

df$myvar <- as.character(df$myvar)

一旦你有了一个角色向量,就可以像使用它一样使用gsub,只需指定变量:

df$myvar <- gsub('D_.__', '', df$myvar)

最后,如果您确实希望将变量作为因子,则可以重命名级别:

levels(df$myvar) <- gsub('D_.__', '', levels(df$myvar))

答案 1 :(得分:0)

strings <- c("D_1__text1" , "D_2__text2" , "D_3__text3")
new_strings <- gsub("D_\\d__", "", strings)

> new_strings
[1] "text1" "text2" "text3"

如果您的特定数据存在问题,请添加dput(your_df)。我认为您的问题是如何存储结果。像df$colnew <- gsub(..., df$colold)这样的东西应该有效。

答案 2 :(得分:0)

Thanks for your suggestions. Finally, I managed to convert my df to a character matrix by:

df <- data.frame(lapply(df, as.character), stringsAsFactors=FALSE)

Then I applied:

gsub('D_.__', '', df$V1)

for each column separately. For just 15 columns this was quite feasable :-)