我想限制导入数据帧时的小数位数。我的.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)
答案 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.numeric
和format
:
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