web-dev-qa-db-ja.com

データフレームの小数の制限(R)

データフレームをインポートする際の小数点以下の桁数を制限したい。私の.txt入力には、列「値」の各行に16の小数があります。私のデータフレームはそのように見えます:

Value 

0.202021561664556
0.202021561664556
0.202021561664556
0.202021561664556
...

私の予想されるデータフレーム

Value
0.20202156
0.20202156
0.20202156
0.20202156
...

機能しない実際の入力(DF):

DF <- "NE001358.Log.R.Ratio
    -0.0970369274475688
    0.131893549586039
    0.0629266495860389
    0.299559132381831
    -0.0128804337656807
    0.0639743960526874
    0.0271669351886552
    0.322395363972391
    0.179591292893632"

DF <- read.table(text=DF, header = TRUE)
12
user3091668

ここに is.numは、数値列の場合はTRUE、それ以外の場合はFALSEです。次に、roundを数値列に適用します。

is.num <- sapply(DF, is.numeric)
DF[is.num] <- lapply(DF[is.num], round, 8)

データフレームを変更する必要があるのではなく、データフレームを8桁に表示したい場合は、次のようになります。

print(DF, digits = 8)
15
G. Grothendieck

_mutate_if_ を使用してdplyrソリューションを実行し、現在のデータフレームの列がnumericかどうかを確認してから、round()関数をそれら

_# install.packages('dplyr', dependencies = TRUE)
library(dplyr)

DF <- DF %>% 
  mutate_if(is.numeric, round, digits = 8)
DF

#>   NE001358.Log.R.Ratio
#> 1          -0.09703693
#> 2           0.13189355
#> 3           0.06292665
#> 4           0.29955913
#> 5          -0.01288043
#> 6           0.06397440
#> 7           0.02716694
#> 8           0.32239536
#> 9           0.17959129
_

2019-03-17に reprexパッケージ (v0.2.1.9000)によって作成されました

7
Tung

これのコピーをutilsディレクトリのプロジェクトのパスにスローし、スクリプトを実行するときにそれをソースします

"formatColumns" <-
 function(data, digits)
 {
    "%,%" <- function(x,y)paste(x,y,sep="")
    nms <- names(data)
    nc <- ncol(data)
    nd <- length(digits)
    if(nc!=nd) 
      stop("Argument 'digits' must be vector of length " %,% 
           nc %,% ", the number of columns in 'data'.")
    out <- as.data.frame(sapply(1:nc, 
                         FUN=function(x, d, Y)
                         format(Y[,x], digits=d[x]), Y=tbl, d=digits))
    if(!is.null(nms)) names(out) <- nms
    out
}

今、あなたは座ってリラックスできます

formatColumns(MyData, digits=c(0,2,4,4,4,0,0))

その他cetera et cetera et cetera

0
izmirlig