我正在努力删除data.frame
中的字符串"D_1__"
、"D_2__"
、"D_3__"
等,同时保留后续文本,即输入:"D_1__succeeding text"
输出:"succeeding text"
。
我试过
df <- gsub("D_.__", "", df)
但没有任何变化
此外,导入的data.frame
的列是具有一个以上级别的factors
。这可能是问题的原因吗?我如何转换df
?
非常感谢你的帮助!
您面临两个问题: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))
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)
这样的东西应该有效。
感谢您的建议。最后,我设法通过将我的df转换为字符矩阵
df<-data.frame(lapply(df,as.character(,字符串AsFactors=FALSE(
然后我申请了:
gsub('D_.__','',df$V1(
分别用于每列。对于仅15列,这是非常可行的:-(