0

文字列内の文字を、最初に文字でサンプリングして別の文字に置き換えたいのですが。インデックスの代わりに文字を出力するのに問題があります。

サンプルデータには、「try」というラベルが付いています。

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))も機能しません。インデックスの代わりに文字を印刷するにはどうすればよいですか?

4

1 に答える 1

1

この問題は、文字がではなくとして保存され、factors。を返すために発生します。characterssampdata.frame

Cはファクターの最初のレベルであるため、1内部として保存され、as.character(ステートメントによって呼び出されますpaste)mini-data.frameで作業するときにこれを引き出します。

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

これは、の呼び出しで出力をdata.frame削除するか、変更して変更するかの2つの方法で解決できます。sampsubcharsamp

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]
 }
于 2012-07-11T11:29:06.777 に答える