2012-07-11 58 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

相关问题