2013-03-02 90 views
9

下午好與指定Ascii碼相對應的字符,返回R中

我試圖與英文字母R鍵創建笛卡爾積。

什麼,我其實是想是這樣的:

首先我創建了一個矩陣

a <- as.matrix(seq(97,122,by=1)) 

然後,我創建2列的數據幀的所有組合的字母

b <- expand.grid(a, a) 

最後我組合了2列

apply(b,1,paste,collapse=" ") 

我遇到的問題是我找不到將這些「小數」轉換爲其Ascii字符的方法。

我已經嘗試了幾個像rawToChar和gsub失敗的東西。

有人可以指出我正確的方向嗎?

感謝

+1

爲什麼不直接使用'letters'? – Arun 2013-03-02 20:50:41

回答

2

一是直接的方法:

res <- do.call(paste, expand.grid(letters, letters)) 

如果你已經一些其他的ASCII值和你想獲得相當於字符:

val <- 65:96 # whatever values you want the equivalent characters for 
mode(val) <- "raw" # set mode to raw 
# alternatively, val <- as.raw(65:96) 
a <- sapply(val, rawToChar) 
res <- do.call(paste, expand.grid(a, a)) 
+1

這很棒Arun。非常感謝! – Diego 2013-03-02 21:27:20

+1

儘量避免調用變量'c'。 – Dason 2013-03-02 21:38:54

+0

@Dason,是的。謝謝指出。我編輯過。 – Arun 2013-03-02 21:41:19

1

要打印的ASCII字符R中,你可以前的ASCII碼號使用print功能用反斜槓\。例如,要打印相當於150的字符,請使用print("\150")

或者爲你上面的例子,你可以嘗試:

a <- sapply(97:122,function(x) rawToChar(as.raw(x))) 

b <- expand.grid(a,a) 

c <- t(apply(b,1,function(x) paste(x[1],x[2]))) 
+0

謝謝你加里。不,我需要的是將數據框中的數值「替換」爲相應的字母,以便在代碼中使用它們。再次感謝。 – Diego 2013-03-02 21:03:49

+0

我同意@Arun使用'letters'可能更容易,但我會用你所說的更新我的示例。 – 2013-03-02 21:08:31

+0

謝謝你加里。我已經嘗試過,但它沒有做我需要的。它返回2個變量,但不是它們的笛卡爾乘積。 – Diego 2013-03-02 21:33:53

14

基於ASCII碼返回字符的一種非常簡單的方法是功能intToUtf8。它也適用於包含多個整數的向量,並將相應的字符作爲一個字符串返回。

vec <- 97:122 
intToUtf8(vec) 
# [1] "abcdefghijklmnopqrstuvwxyz" 

intToUtf8(65) 
# [1] "A"