【问题标题】:Dropping the last two numbers from every entry in a column of data.table删除 data.table 列中每个条目的最后两个数字
【发布时间】:2022-01-04 03:36:11
【问题描述】:

前言: 我是 R 的初学者,渴望学习。请不要将问题的简单性(如果它是一个简单的答案)误认为缺乏研究或努力!

这是我正在处理的数据:

         year state age  POP
     1:   90  1001   0  239
     2:   90  1001   0  203
     3:   90  1001   1  821
     4:   90  1001   1  769
     5:   90  1001   2 1089

州列包含所有州的 FIPS 代码。为了合并,我需要状态列来匹配我的另一个数据集。为了完成这个任务,我所要做的就是省略每个 FIPS 代码的最后两个数字,这样表格看起来像这样:

         year state age  POP
     1:   90  10     0  239
     2:   90  10     0  203
     3:   90  10     1  821
     4:   90  10     1  769
     5:   90  10     2 1089

我不知道如何在数字列上完成这项任务。 Substr() 使这在字符列上变得容易。

【问题讨论】:

  • your_data[, state := substr(state, 1, 2)]
  • your_data$state <- substr(your_data$state, 1, 2)
  • @Onyambu,谢谢!

标签: r data.table drop


【解决方案1】:

如果您的号码并非总是 4 位数字,要省略最后两位,您可以利用 substr() 的矢量化行为

x <- rownames(mtcars)[1:5]
x
#> [1] "Mazda RX4"         "Mazda RX4 Wag"     "Datsun 710"       
#> [4] "Hornet 4 Drive"    "Hornet Sportabout"
substr(x, 1, nchar(x)-2)
#> [1] "Mazda R"         "Mazda RX4 W"     "Datsun 7"        "Hornet 4 Dri"   
#> [5] "Hornet Sportabo"

# dummy code for inside a data.table
dt[, x_new := substr(x, 1, nchar(x)-2)]

【讨论】:

    【解决方案2】:

    仅用于在您可能有一个非常大的数字列并且需要正确substr 的情况下对此进行概括。 (这对于将其作为字符列存储/导入可能是一个很好的论据,但这是一个不完美的世界......)

    x <- c(10000000000, 1000000000, 100000000, 10000000, 1000000,100000,10000,1000,100)
    
    substr(x, 1, nchar(x)-2 )
    #[1] "1e+" "1e+" "1e+" "1e+" "1e+" "1e+" "100" "10"  "1" 
    
    as.character(x)
    #[1] "1e+10" "1e+09" "1e+08" "1e+07" "1e+06" "1e+05" "10000" "1000" 
    #[9] "100" 
    
    xsf <- sprintf("%.0f", x)
    substr(xsf, 1, nchar(xsf)-2)
    #[1] "100000000" "10000000"  "1000000"   "100000"    "10000"    
    #[6] "1000"      "100"       "10"        "1"   
    
    cbind(x, xsf, xsfsub=substr(xsf, 1, nchar(xsf)-2) )
    #      x       xsf           xsfsub     
    # [1,] "1e+10" "10000000000" "100000000"
    # [2,] "1e+09" "1000000000"  "10000000" 
    # [3,] "1e+08" "100000000"   "1000000"  
    # [4,] "1e+07" "10000000"    "100000"   
    # [5,] "1e+06" "1000000"     "10000"    
    # [6,] "1e+05" "100000"      "1000"     
    # [7,] "10000" "10000"       "100"      
    # [8,] "1000"  "1000"        "10"       
    # [9,] "100"   "100"         "1"  
    

    【讨论】:

      猜你喜欢
      • 2012-11-23
      • 2016-01-21
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      相关资源
      最近更新 更多