2012-07-11 52 views
0

我想用另一個字符替換字符串中的一個字符,首先用字符取樣。我無法打印出字符而不是索引。R:如何在取樣和打印出字符而不是索引後替換字符串中的字符?

實例數據,標有「嘗試」:

L 0.970223325 - 0.019851117 X 0.007444169 
K 0.962779156 - 0.027295285 Q 0.004962779 
P 0.972704715 - 0.027295285 NA 0 
C 0.970223325 - 0.027295285 L 0.00248139 
V 0.970223325 - 0.027295285 T 0.00248139 

我試圖樣品使用加權的概率給定行的字符。

samp <- function(row) { 
sample(try[row,seq(1, length(try), 2)], 1, prob = try[row,seq(2, length(try), 2)]) 
} 

然後,我想用選定的字符替換給定字符串中的位置。

subchar <- function(string, pos, new) { 
paste(substr(string, 1, pos-1), new , substr(string, pos+1, nchar(string)), sep='') 
} 

我的問題是 - 如果我這樣做,例如

> subchar("KLMN", 3, samp(4)) 
[1] "KL1N" 

但我想它改爲 「KLCN」。 As.character(samp(4))也不起作用。我如何讓它打印出字符而不是索引?

+0

警告:有一個函數'try',這樣可以避免可能更喜歡在名稱混亂你的數據mytry或者tryfoo。 – 2012-07-11 15:32:11

回答

1

問題就出現了,因爲你的信被存儲爲factors,而不是characters,和samp返回一個data.frame

C是你的因素第一級,這樣在內部存儲爲1,並且as.character(其中得到由paste聲明援引)在迷你data.frame工作時,翻出了這一點:

samp(4) 
    V1 
4 C 
as.character(samp(4)) 
[1] "1" 

您可以通過兩種方式解決這個問題,無論是在下降的呼叫samp輸出的data.framesubchar,或修改samp這樣做:

subchar("KLMN", 3, samp(4)[,1]) 
[1] "KLCN" 

samp2 <- function(row) 
    { sample(try[row,seq(1, length(try), 2)], 1, prob = try[row,seq(2, length(try), 2)])[,1] 
    } 

subchar("KLMN",3,samp2(4)) 
[1] "KLCN 

您也可能會發現更容易的子集內品嚐,你可以從那裏刪除data.frame:

samp3 <- function(row){ 
try[row,sample(seq(1,length(try),2),1,prob=try[row,seq(2,length(try),2)]),drop=TRUE] 
} 
+0

這很好用!謝謝!! – 2012-07-12 01:24:51

相關問題