簡體   English   中英

根據另一列中值的最后 2 位數字創建新列

[英]Create new column based on last 2 digits of values in another column

應該足夠簡單,但它已成為一個難以解決的問題。 我有按尾隨小數(上游數據源的產品)分組的數據。 例如,可以將組“3”的數據分組為 0.00003,而組“10”的數據為 24.00010。 但是,當我同時運行我的regexpr代碼和我的str_sub代碼時,就好像 R 不把最后一個 0 視為重要的一樣。


示例數據

df <- data.frame(a = c(0.00003, 0.00010, 24.00003, 24.00010))

print(df)
         a
1  0.00003
2  0.00010
3 24.00003
4 24.00010

期望輸出

         a   group
1  0.00003 group03
2  0.00010 group10
3 24.00003 group03
4 24.00010 group10

失敗的嘗試 1

df %>% mutate(group = paste0("group", regmatches(a, regexpr("(\\d{2}$)", a))))         
         a   group
1  0.00003 group03
2  0.00010 group01
3 24.00003 group03
4 24.00010 group01

這種失敗是很奇怪的,因為當我檢查它時它有效: https://regexr.com/ ,使用(\\d{2}$)


失敗的嘗試 2

df %>% mutate(group = paste0("group", str_sub(a, start = -2)))
         a   group
1  0.00003 group03
2  0.00010 group01
3 24.00003 group03
4 24.00010 group01

我們可以轉換為character並使用str_sub 另外,請確保設置了options

options(scipen = 999)
library(stringr)
library(dplyr)
df %>% 
   mutate(group = paste0("group", str_sub(sprintf("%2.5f", a), start = -2)))
#        a   group
#1  0.00003 group03
#2  0.00010 group10
#3 24.00003 group03
#4 24.00010 group10

這里的關鍵是,當您使用正則表達式進行子字符串或提取時,您正在將數字轉換為字符串。 但是,該字符串不會保留您期望的格式。

library(tidyverse)

tibble(a = c(0.00003, 0.00010, 24.00003, 24.00010)) %>%
  mutate(group1 = paste0("group", str_extract(sprintf("%.5f", a), "\\d{2}$")),
         group2 = paste0("group", str_extract(a, "\\d{2}$")),
         sprint_char = sprintf("%.5f", a),
         char = as.character(a))
#> # A tibble: 4 x 5
#>          a group1  group2  sprint_char char    
#>      <dbl> <chr>   <chr>   <chr>       <chr>   
#> 1  0.00003 group03 group05 0.00003     3e-05   
#> 2  0.0001  group10 group04 0.00010     1e-04   
#> 3 24.0     group03 group03 24.00003    24.00003
#> 4 24.0     group10 group01 24.00010    24.0001

在這里看到as.character(a)不保持相同的結構a 您可以改為使用sprintf設置格式,然后提取所需的文本。

df$group <- sprintf('%s%02.0f', 'group', 1e5*(df$a %% .001))

df
#          a   group
# 1  0.01003 group03
# 2  0.03010 group10
# 3 24.03003 group03
# 4 24.00010 group10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM