2

私は R で問題を解決する方法を数時間理解しようとしています。うまくいけば、誰かが助けることができます:

次のデータ テーブルがあります (xout と呼ばれるサンプルのみが示されています)。

       factorx Freq cumFreq   relative 
1    (-2,-1.9]   13      13 0.00132626 
2  (-1.9,-1.8]   18      31 0.00183636 
3  (-1.8,-1.7]   22      53 0.00224444 
4  (-1.7,-1.6]   18      71 0.00183636 
5  (-1.6,-1.5]   22      93 0.00224444 
6  (-1.5,-1.4]   31     124 0.00316262

通常の曲線からの相対頻度で新しい列を追加しようとしています。列 factorx を min と max という 2 つの列に分割して、数値を使用して dnorm 関数に渡すようにしました。r での文字列操作の試みはすべて失敗しました。私は使用しようとしました:

gsub("[^/d]","",strsplit(toString(xout$factorx),",")))

しかし、それは失敗しました。私はrにかなり慣れていないので、もっと良い方法があると確信しています。

4

2 に答える 2

1

絶対に使いたい場合はsub 、ここにそれを行う1つの方法があります。(.)パターンで使用したいグループをキャプチャしてregexp、それを拾うことができます。

min <- as.numeric(sub("\\((.*),.*$", "\\1", xout$factorx))
> min
# [1] -2.0 -1.9 -1.8 -1.7 -1.6 -1.5

max <- as.numeric(sub(".*,(.*)\\]$", "\\1", xout$factorx))
> max
# [1] -1.9 -1.8 -1.7 -1.6 -1.5 -1.4

また、次のようstrsplitに , andsubstrを使用できます。sapply

# first convert to character (to use `nchar` and `substr`)
xout$factorx <- as.character(xout$factorx)
# first remove the ( and ] and then split by "," and then convert to numeric
sapply(strsplit(substr(xout$factorx, 2, nchar(xout$factorx)-1), ","), as.numeric)
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,] -2.0 -1.9 -1.8 -1.7 -1.6 -1.5
[2,] -1.9 -1.8 -1.7 -1.6 -1.5 -1.4

行列の行にminandがあります。max

の別のバリエーション: 最初にとをsub削除してからを使用できます。(]substrsplit

sapply(strsplit(sub("\\((.*)\\]", "\\1", xout$factorx), ","), as.numeric)
于 2013-01-31T07:25:50.237 に答える
0

できませんでしたか

data.frame(xout, newCol=c(1,2,3,4,...))

もちろん、指定するベクトルは何でもかまいません。

例: Freq * 4 で新しい列を追加します。

data.frame(xout, FreqFour=xout[[2]]*4)

その結果

       factorx Freq cumFreq   relative FreqFour
1    (-2,-1.9]   13      13 0.00132626       52
2  (-1.9,-1.8]   18      31 0.00183636       72
3  (-1.8,-1.7]   22      53 0.00224444       88
4  (-1.7,-1.6]   18      71 0.00183636       72
5  (-1.6,-1.5]   22      93 0.00224444       88
6  (-1.5,-1.4]   31     124 0.00316262      124
于 2013-01-31T05:34:13.117 に答える