使用字符串(R)限制数据框中的小数位数

时间:2014-04-22 20:53:46

标签: string r decimal max

我想限制导入数据帧时的小数位数。我的.txt输入在collumn“Value”中的每一行都有16位小数。在同一个列中,它可以同时包含数字和字符串。我的数据框看起来像这样:

Value 

0.202021561664556
0.202021561664556
0.202021561664556
0.202021561664556
NC
...

我的预期数据框

Value
0.20202156
0.20202156
0.20202156
0.20202156
NC
...

不起作用的实际输入(DF):

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

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

3 个答案:

答案 0 :(得分:1)

您可以在字符向量上使用substring来剪切它们。这里我们只取字符串中的前十个字符。

> DF
##               Value
## 1 0.202021561664556
## 2 0.202021561664556
## 3 0.202021561664556
## 4 0.202021561664556
## 5                NC

> DF$Value <- substring(DF$Value, 1, 10)
> DF
##        Value
## 1 0.20202156
## 2 0.20202156
## 3 0.20202156
## 4 0.20202156
## 5         NC

但由于这些是对数比率,因此它们应该是数字。在帖子底部的DF数据中,您可以将substring包裹在as.numeric中,NA值将替换&#34; NC&#34;条目。

> DF[,1] <- as.numeric(substring(DF[,1], 1, 10))

答案 1 :(得分:1)

您可以使用as.numericformat

执行此操作
num <- as.numeric(as.character(DF[,1]))
ifelse(is.na(num), DF[,1], format(num, nsmall=8))
#  [1] "-0.09703693" " 0.13189355" " 0.06292665" " 0.29955913" "-0.01288043" " 0.06397440" " 0.02716694"
#  [8] " 0.32239536" " 0.17959129" "NC"

如果您想限制小数位后的有效数字而不是数字,则应使用digits选项而不是nsmall。如果您不喜欢数字开头的前导空格,请使用trim=TRUE

答案 2 :(得分:1)

这个怎么样:

DF$NE001358.Log.R.Ratio <- as.character(DF$NE001358.Log.R.Ratio)
DFn <- suppressWarnings(as.numeric(DF[,1]))
DF[!is.na(DFn),] <- format(DFn,nsmall=8)[!is.na(DFn)]
DF