R语言 更改数字的小数部分-为什么我的switch()语句的行为不符合预期?[duplicate]

tpxzln5u  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(90)
    • 此问题在此处已有答案**:

Why are these numbers not equal?(6个答案)
3天前关闭。
我有一些数据的格式

test <- c(10,11,12,13.1,13.2,13.3,14,15)

整数计数等效于4个子单元的计数单位,因此13.1等不意味着13又十分之一,而是13又四分之一(即从1到2的计数为1、1.1、1.2、1.3、2等)我正尝试绘制这些图,因此,为了使间距正确,我认为需要更改它们,使x.1变为x.25,x.2变为x.5,x.3变为x.75。我可以扩展整数,但我认为这会导致其他问题,所以我更愿意做.25/.5/.75的转换。
我尝试使用switch()执行此操作,但没有得到预期的结果,因此我想我的问题有两个:
1.为什么switch()不能按预期工作?
1.有什么更好的方法来做到这一点,我显然错过了?
我试着取输入的模1,只给我.0,.1等,乘以10,加1,得到一个数字1 - 4,并使用它从switch()语句中选择相关的case选项,如下所示。
预期结果:[1] 10.00 11.00 12.00 13.25 13.5 13.75 14.00 15.00
因此13.1和13.2项的评估结果似乎与我预期的不同。

# testing modulo approach
sapply(test, FUN = \(x) {
  (x %% 1)*10+1
}
)
[1] 1 1 1 2 3 4 1 1

然后

sapply(test, FUN = \(x) {
  switch((x %% 1)*10+1,
         x,                # option 1 
         floor(x) + 0.25,  # option 2
         floor(x) + 0.5,   # option 3
         floor(x) + 0.75)  # option 4
}
)
[1] 10.00 11.00 12.00 13.10 13.25 13.75 14.00 15.00
xwbd5t1u

xwbd5t1u1#

可以尝试使用floor

floor(test) + (test - floor(test)) * 2.5
[1] 10.00 11.00 12.00 13.25 13.50 13.75 14.00 15.00

相关问题