1

私はこのように見える行列を持っています:

wun2                               308.0      111.0       72.0       64.0
wupA                              8177.0     3933.0     2235.0     2057.0
wus                                  5.0        0.0        9.0        5.0
x16                                581.2      154.3      297.1      384.2
xmas-1                              26.5       58.0       26.5       31.0
xmas-2                             201.5      138.2      136.5      203.0
y                                   18.0        1.0       13.0        8.0
yar                                  5.0        0.0        0.0        2.0
yata                              1283.0      679.0      735.0      784.0
yellow-b                           129.0       82.0      103.0       96.0
yellow-c                           817.3      415.0      832.0      788.0
zormin                            3447.0     2005.0     1999.0     2300.0
zpg                                  1.5        0.0        0.0        0.0
zwilch                               1.0        0.0        8.0       14.0
zye                                 83.0       64.0       17.0       30.8

その行列を四捨五入したいのですが、最後の小数が 5 であるすべての数値を次の整数に切り上げる必要があります。したがって、一般的な round() を実行する前に、.(somenumber+)5 で終わるすべてのセルに上限関数を適用したいと考えました。

それを glob2rx へのシェル式として指定する方法がわからないので、適切な正規表現を作成しますが、次のようにする必要があると推測しました。

 grx <-  "^\\d+\\.\\d+5$"

ただし、これは、私が行ったときにセルを取得していないようですgrep(grx, x=matrix.1, value=TRUE)

何が間違っている可能性がありますか?

ありがとう!カルメン

4

2 に答える 2

1

このようなものは役に立ちますか?

library(stringr)

a <- read.table("test.txt")

apply(a[, 2:ncol(a)], 2, function(x) {
    w <-str_detect(x, "\\.[0-9]{2,}") & str_sub(x, start=-1) == 5
    x[w] <- ceiling(x[w])
    round(x,2)})

          V2      V3     V4     V5
 ## [1,]  308.0  111.00   72.0   64.0
 ## [2,] 8177.0 3933.00 2235.0 2057.0
 ## [3,]    5.0    0.00    9.0    5.0
 ## [4,]  581.2  154.30  298.0  384.2
于 2013-05-13T19:40:29.670 に答える