【问题标题】:Limiting the number of decimals in a dataframe with strings (R)使用字符串 (R) 限制数据框中的小数位数
【发布时间】:2014-04-22 20:53:45
【问题描述】:

我想在导入数据框时限制小数位数。我的 .txt 输入在“值”列中的每一行都有 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)

【问题讨论】:

  • 例如,假设NC 表示NA(未计算/不可用),可能:read.table(text=DF, header = TRUE, colClasses="numeric", na.strings="NC")

标签: string r decimal max


【解决方案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.numericNA 值将替换“NC”条目。

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

【讨论】:

    【解决方案2】:

    您可以使用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

    【讨论】:

      【解决方案3】:

      这个怎么样:

      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         
      

      【讨论】:

        猜你喜欢
        • 2014-06-06
        • 1970-01-01
        • 1970-01-01
        • 2021-05-22
        • 1970-01-01
        • 1970-01-01
        • 2020-08-11
        • 2022-06-28
        • 2017-11-30
        相关资源
        最近更新 更多