我想知道在导入数据框时是否有办法转换特定于语言的字母。
我的意思是特殊的字符,如:şăî被转换为s a i a。
现在我正在做的是在为R准备数据之前在excell内执行手动替换。我找到了一个VBA代码来进行字符或字符串的批量替换,但是在VBA编辑器中输入特殊字符时我收到了问号。
我需要这个地理编码项目。
答案 0 :(得分:1)
char代码192..609的范围包含可用ASCII表示的总共221个字符(即可以从变音字符转换):
ÀÃÃÃââËËÏÏÏÏ¢Ô¢Ô¢ÔÔÕÔÕÔÕ†óôöøúúúúĂĄąćĈĉĊċċďďďĐēēēĕĖĘĘĚĝĞĞĞĞĠġģĤĥĥĥ更多信息šŢŤťŦŧŨŪŬŭŮŰűŲųŵŶŷŹðŽŽƀƉƑƗƗƚƠơƫƮƯưưƶǍǏǐǐǒ ǓǔǕǗǘǙǚǜǞǟǤǥǦǧǨǩǪǬǬɡɡɡ
一般情况下,您可以不使用辅助工作表,使用可替换的字符填充字典,如下面的代码:
Sub Test()
ReplaceDiacritics Selection
End Sub
Sub ReplaceDiacritics(oTargetRange As Range)
Static oDiaChars As Object
Dim i, j, sRange, sCured, sChar, aRes
If oDiaChars Is Nothing Then
Set oDiaChars = CreateObject("Scripting.Dictionary")
sRange = ""
For i = 192 To 609
sRange = sRange & ChrW(i)
Next
With CreateObject("ADODB.Stream")
.Type = 2
.Mode = 3
.Open
.Charset = "ascii"
.WriteText sRange
.Position = 0
sCured = .ReadText
.Close
End With
For i = 192 To 609
sChar = Mid(sCured, i - 191, 1)
If sChar <> "?" Then oDiaChars(ChrW(i)) = sChar
Next
End If
If oTargetRange.Cells.Count = 1 Then
sRange = oTargetRange.Value
For Each sChar In oDiaChars
sRange = Replace(sRange, sChar, oDiaChars(sChar))
Next
oTargetRange.Value = sRange
Else
aRes = oTargetRange.Value
For i = LBound(aRes, 1) To UBound(aRes, 1) ' rows
For j = LBound(aRes, 2) To UBound(aRes, 2) ' columns
For Each sChar In oDiaChars
aRes(i, j) = Replace(aRes(i, j), sChar, oDiaChars(sChar))
Next
Next
Next
oTargetRange.Value = aRes
End If
End Sub
字典声明为静态因此它仅在第一次运行时填充,我测试了每个1000个单元3500个字符长度的代码,对我来说大约需要8秒。因此,为了避免长时间悬挂,请更好地将其称为ReplaceDiacritics ActiveSheet.UsedRange
,而不是ReplaceDiacritics Cells
。
答案 1 :(得分:0)
在社区@cyboashu的帮助下,我正在使用这个便宜但相当有效的VBA宏:
Sub replace()
'
Dim i As Integer
'selecting the sheet in which to do the replacements
Sheets("Sheet1").Select
For i = 2 To 5
Cells.Replace What:=Sheet2.Cells(i, 1), Replacement:=Sheet2.Cells(i, 2), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next i
End Sub
为此,我必须创建一个新工作表并将其添加到原始的Excel中。在我的情况下,它被称为Sheet2,我在for循环中引用它,它可以扩展为更多的字符。
如果有人可以分享更多先进或最佳方法,请这样做,我很乐意探索它们!
答案 2 :(得分:0)
在R中(因为你的问题也用R标记)你可以使用iconv
进行翻译(但对我来说,第一个角色没有显示,可能取决于你的操作系统):
> iconv("ș ă î â", "UTF-8", "ASCII//TRANSLIT")
[1] "? a i a"