我看过很多有关删除R中特殊字符的文章(例如Remove all special characters from a string in R?),但是没有一种策略可以解决我的问题。
我有一个抄本,可通过qdap的read.transcript()读取。当我阅读文档时,它会使带有特殊字符的行看起来像这样:
$targetFolder = public_path().'/images/';
$name=$image->getClientOriginalName();
$extension = $image->getClientOriginalExtension(); // add
$picture = sha1($name . time()) . '.' . $extension; //add
$image->move($targetFolder, $picture);
$image = \Intervention\Image\Facades\Image::make(sprintf('images/%s', $picture))->encode('jpg', 75);
我尝试过:
If anyone knows how to simply change these special characters (i.e <e1><b8><9d> to e), again please feel free to update!
但这不会删除特殊字符,还会删除!
我也尝试过:
ATL1$X2 <- gsub("[^0-9A-Za-z///,.?()' ]", "", ATL1$X2)
If anyone knows how to simply change these special characters (i.e e1b89d to e), again please feel free to update
但这更糟,并且删除了所有标点符号,但仍然无法解决我的问题。
最后,我也尝试过:
str_replace_all(ATL1$X2, "[^[:alnum:]]", " ")
If anyone knows how to simply change these special characters i e e1 b8 9d to e again please feel free to update
但是这里也没有任何改变。
在理想世界中,输出看起来像:
iconv(ATL1$X2, from = 'UTF-8', to = 'ASCII//TRANSLIT')
If anyone knows how to simply change these special characters (i.e <e1><b8><9d> to e), again please feel free to update!
因此,特殊字符将按其应“原样”的方式读入。如果无法做到这一点,请坦白地说,只要删除特殊字符(而不是其他字符,例如感叹号),然后看起来像这样,就可以了:
If anyone knows how to simply change these special characters (i.e e e e to e), again please feel free to update!
谢谢!
答案 0 :(得分:4)
有几件事使这变得困难:
qdap.transcript
会有所帮助。至少您在此处显示的内容以及您的结果与之一致,它们不是是特殊字符,而实际上是“ gsub
会很高兴地遵守,并删除了“ <”和““>”,而单独保留了“ e1”等。为解决您的问题,我认为您想转换回特殊字符,然后使用stri_trans_general
包中的stringi
。我确定那里还有其他类似的功能,但这对我有用。事实证明,转换回特殊字符是困难的部分,但是我有一些有效的代码:
library(stringi)
mystring <- 'If anyone knows how to simply change these special characters (i.e <e1><b8><9d> to e), again please feel free to update!'
pos <- gregexpr('(<[A-Fa-f0-9]{2}>)+', mystring)[[1]]
replace <- substring(mystring, pos, pos+attr(pos, 'match.length')-1)
replace <- sapply(replace, function(r) {
eval(parse(text=paste0('\'', gsub('>', '', gsub('<', '\\\\x', r)), '\'')))
})
for(i in seq_along(replace)) {
mystring <- sub('(<[A-Fa-f0-9]{2}>)+', replace[i], mystring)
}
mystring <- stri_trans_general(mystring, 'latin-ascii')
我们首先提取“ <”和“>”之间看起来像十六进制的所有内容,然后将它们转换为文字“ \ xe1 \ xb8 \ x9d”,然后要求R进行处理,并将旧值替换为这些替换值。
仅在最后一行,我们将特殊字符替换为(在此示例中)“ e”