【问题标题】:getting last two digits from numeric in R从R中的数字中获取最后两位数字
【发布时间】:2017-05-16 19:23:22
【问题描述】:

我需要从以数字类型保存的数字中获取最后两位数字并将其另存为变量,例如: 一个=1945 它需要最后两位数字并将其放在 b b=45

【问题讨论】:

  • 你应该表现出你自己的努力。

标签: r numeric digits


【解决方案1】:

可以使用取模运算符%%

a <- 1945
b <- 1945 %% 100 
#b = 45 

【讨论】:

  • 这不适用于倒数第二个位置为零的数字。例如 2002 %% 100 返回 2,而不是 02。
【解决方案2】:

如果您使用年份,最好(以及我用于此的)可能是 sprintf 与 %% 结合使用,这会将数字转换为字符串,但会将 1905 保留为 05 5(根据您的应用程序可能更可取):

sprintf('%02d', 1999:2010 %% 100)
# [1] "99" "00" "01" "02" "03" "04" "05" "06" "07" "08" "09" "10"

回过头来补充一下,从正确利用基础 R 中的日期/时间实用程序的意义上说,也许更“正确”的方法可能是首先转换为 Date,然后使用 format:

format(.Date(365.25 * (1999:2010 - 1969.75)), '%y')
# [1] "99" "00" "01" "02" "03" "04" "05" "06" "07" "08" "09" "10"

1969.75 将 1970 年左右的年份重新居中(请参阅 .Date(0L)),但我们需要将其重新居中以考虑闰年。

然而,由于闰世纪,即使这样也只能在大约 400 年(或者可能多达 1600 年?)内保持正确......对于如此广泛的日期,Dates 的前进方向是:

format(as.Date(sprintf('%d-01-01', 1999:2010)), '%y')

【讨论】:

    【解决方案3】:

    怎么样...

    a <- 1945
    b <- a - round(a, -2)
    b
    [1] 45
    

    这是假设没有小数,当然。

    这具有保留符号的附带好处...

    a <- -1945
    b <- a - round(a, -2)
    b
    [1] -45
    

    【讨论】:

    • 由于 R 舍入偶数与赔率不同,这仅适用于倒数第二个数字为 0:4 的情况。例如1966 - round(1966, -2) 是 -34。
    【解决方案4】:

    您可以直接使用substr(),它会检测并将numeric 转换为string。需要转换回数字。例如:

    num = c(1112, 1113)
    trim = as.numeric(substr(num, nchar(num[1])-1, nchar(num[1])))
    

    【讨论】:

    • 刚想到这个,最佳答案IMO
    • 一些意想不到的(对我来说)行为: num = c(10.55, 0.00) trim = as.numeric(substr(num, nchar(num[1])-1, nchar(num[ 1]))) 返回 NA 为 0.00
    【解决方案5】:

    对于后代,这允许在小数点后尾随零。这也不需要计算字符串/数字的长度。

    stringr 具有 str_sub 函数,f_pad_right 来自 numform 包。

    这会从一个数字中获取最后一位数字:

    > library(stringr)
    > library(numform)
    > str_sub(f_pad_right(as.character(1.20), pad.char = 0,width = 4), - 1, - 1)
    [1] "0"
    

    最后两位数:

    > str_sub(f_pad_right(as.character(1.20), pad.char = 0,width = 4), - 2, - 1)
    [1] "20"
    

    回答 OP 问题:

    > str_sub(f_pad_right(as.character(1945), pad.char = 0,width = 4), - 2, - 1)
    [1] "45"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 2017-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多