如何在R中分隔小数点后的数字?
例如:我有号码123.456,想返回456 函数如何在R中分隔小数点后的数字?,r,decimal,digit,isolation,truncated,R,Decimal,Digit,Isolation,Truncated,例如:我有号码123.456,想返回456 函数trunc()基本上分离()小数点前的数字 是否有一个功能仅隔离小数点后的数字? 两个后续问题: 有没有办法不用写正则表达式就可以做到这一点 如果我想保留这个标志怎么办?例如,如果我想(反向)将-123.456截断为-456 我不喜欢这种操作的文本处理 棘手的部分是将小数转换成整数。这里我使用一个循环。不太可能需要多次迭代。因此,性能可能不是问题 fun <- function(x) { y <- abs(x) - floor(ab
trunc()
基本上分离()小数点前的数字
是否有一个功能仅隔离小数点后的数字?
两个后续问题:
我不喜欢这种操作的文本处理 棘手的部分是将小数转换成整数。这里我使用一个循环。不太可能需要多次迭代。因此,性能可能不是问题
fun <- function(x) {
y <- abs(x) - floor(abs(x))
n <- 0
while (abs(y - round(y, n)) > .Machine$double.eps^0.5) {
n <- n + 1
}
sign(x) * y * 10^n
}
fun(123.456)
#[1] 456
fun(-123.456)
#[1] -456
fun我想使用模运算符(%)和1作为除法器是可行的。它确实成功地隔离了小数点后的数字,但保留了小数点:
123.456 %% 1
[1] 0.456
但是,它仅适用于正数,因为符号没有保留,也没有报告正确的数字(模运算符功能的b/c):
包括abs()。可通过添加以下内容来包括该标志:
sign(x) * (abs(x) %% 1)
这是另一条路
> x <- c(123.456, -123.456)
> sign(x) * as.integer(sapply(strsplit(as.character(x), "\\."), "[", 2))
[1] 456 -456
>x符号(x)*作为.integer(sapply(strsplit)(作为.character(x),“\\”,“[”,2))
[1] 456 -456
符号(x)*(abs(x)%%%1)
@Gregor那不是x-trunc(x)
?哎呀,错过了需要一个整数。似乎浮点算术问题正等着把你搞砸。很高兴有很多答案都能解决这个问题,但把它保留为十进制似乎更安全。出于好奇:这有什么用例?@Roland,我真的只需要它来测试非整数的存在。我是我对如何进一步扩展这个概念很感兴趣,主要是出于好奇。但是,后来我发现我无法想出一个圆滑的方法来解决这个问题,所以我问了。
> x <- c(123.456, -123.456)
> sign(x) * as.integer(sapply(strsplit(as.character(x), "\\."), "[", 2))
[1] 456 -456