データフレームをインポートする際の小数点以下の桁数を制限したい。私の.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)
ここに 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)
_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)によって作成されました
これのコピーを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