2014-04-22 3 views
7

Я хотел бы ограничить число десятичных знаков при импорте фрейма данных. Мой вход .txt имеет 16 десятичных знаков для каждой строки в столбце «Значение». Мой dataframe выглядеть так:Ограничение числа десятичных знаков в фрейме данных (R)

Value 

0.202021561664556 
0.202021561664556 
0.202021561664556 
0.202021561664556 
... 

Мой ожидается dataframe

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) 

ответ

11

Здесь 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) 
+0

Это модификация достаточно? – user3091668

+0

Теперь вы работаете с кодом ... Я действительно не понимаю, почему он не работает в моих реальных данных. – user3091668

+0

Могу ли я ограничить символы в строке каким-то другим способом? – user3091668

0

просто бросить копию этого в пути вашего проекта в 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)) 

и так далее и так далее и так далее