将字符串转换为定义小数位数的数字
Convert string to numeric defining the number of decimal digits
从给定的 data.frame 个地理参考点中,我在字符列中找到了坐标,格式如下
"44.524768336 11.4832955249"
"44.6858512233 11.1698766486"
"44.498179364 11.6599683838"
为了从每一行中提取数值,我使用了以下命令(我将以第一行为例)。
res <- strsplit(x = "44.524768336 11.4832955249", split = " ", fixed = T)
res
[[1]]
[1] "44.524768336" "11.4832955249"
as.numeric(res[[1]][1])
[1] 44.52477
as.numeric(res[[1]][2])
[1] 11.4833
在此转换中,我丢失了 6 位小数。
有没有一种方法可以在不修改任何 R 全局设置的情况下将字符串转换为设置小数位数的数字?
你实际上并没有丢失数字;这就是它被打印到控制台的方式:
options(digits = 4)
R> as.numeric(res[[1]][1])
#[1] 44.52
##
options(digits = 12)
R> as.numeric(res[[1]][1])
#[1] 44.524768336
正如 David Arenburg 在评论中指出的那样,您也可以使用 print(..., digits = <n>)
。
使用 objective 获得一个数字并采纳@nrussell 在之前的回答(以及以下评论)中提供的建议,我找到了以下解决方案:
string.number <- "44.004768336"
# Splitting the string in integer and decimal part
number.part <- strsplit(string.number, ".", fixed = T)
as.numeric(number.part[[1]][1]) # Integer part
[1] 44
as.numeric(number.part[[1]][2]) # Decimal part. Note the effect of the leading zeros
[1] 4768336
# saving the current and set the new setting the "digits" option
getOption(x = "digits")
[1] 11
current.n.dgt <- getOption("digits")
options(digits = 11)
# Combining integer and decimal in a number saving the required numbers of decimal digits
integer.part <- as.numeric(number.part[[1]][1])
exp.numb <- (trunc(log10(as.numeric(number.part[[1]][2])))+1+(nchar(number.part[[1]][2])-nchar(as.character(as.numeric(number.part[[1]][2])))))
decimal.part <- as.numeric(number.part[[1]][2])/(10^exp.numb)
res.number <- integer.part + decimal.part
res.number
[1] 44.004768336
下面是一种更简单的避免字符串拆分的方法
getOption("digits")
[1] 7
current.n.dgt <- getOption("digits")
string.number <- "44.004768336"
options(digits = 11)
as.numeric(string.number)
[1] 44.004768336
options(digits = current.n.dgt)
getOption("digits")
[1] 7
从给定的 data.frame 个地理参考点中,我在字符列中找到了坐标,格式如下
"44.524768336 11.4832955249"
"44.6858512233 11.1698766486"
"44.498179364 11.6599683838"
为了从每一行中提取数值,我使用了以下命令(我将以第一行为例)。
res <- strsplit(x = "44.524768336 11.4832955249", split = " ", fixed = T)
res
[[1]]
[1] "44.524768336" "11.4832955249"
as.numeric(res[[1]][1])
[1] 44.52477
as.numeric(res[[1]][2])
[1] 11.4833
在此转换中,我丢失了 6 位小数。 有没有一种方法可以在不修改任何 R 全局设置的情况下将字符串转换为设置小数位数的数字?
你实际上并没有丢失数字;这就是它被打印到控制台的方式:
options(digits = 4)
R> as.numeric(res[[1]][1])
#[1] 44.52
##
options(digits = 12)
R> as.numeric(res[[1]][1])
#[1] 44.524768336
正如 David Arenburg 在评论中指出的那样,您也可以使用 print(..., digits = <n>)
。
使用 objective 获得一个数字并采纳@nrussell 在之前的回答(以及以下评论)中提供的建议,我找到了以下解决方案:
string.number <- "44.004768336"
# Splitting the string in integer and decimal part
number.part <- strsplit(string.number, ".", fixed = T)
as.numeric(number.part[[1]][1]) # Integer part
[1] 44
as.numeric(number.part[[1]][2]) # Decimal part. Note the effect of the leading zeros
[1] 4768336
# saving the current and set the new setting the "digits" option
getOption(x = "digits")
[1] 11
current.n.dgt <- getOption("digits")
options(digits = 11)
# Combining integer and decimal in a number saving the required numbers of decimal digits
integer.part <- as.numeric(number.part[[1]][1])
exp.numb <- (trunc(log10(as.numeric(number.part[[1]][2])))+1+(nchar(number.part[[1]][2])-nchar(as.character(as.numeric(number.part[[1]][2])))))
decimal.part <- as.numeric(number.part[[1]][2])/(10^exp.numb)
res.number <- integer.part + decimal.part
res.number
[1] 44.004768336
下面是一种更简单的避免字符串拆分的方法
getOption("digits")
[1] 7
current.n.dgt <- getOption("digits")
string.number <- "44.004768336"
options(digits = 11)
as.numeric(string.number)
[1] 44.004768336
options(digits = current.n.dgt)
getOption("digits")
[1] 7