【问题标题】:Finding letters mixed with numbers?找到混合数字的字母?
【发布时间】:2021-07-01 21:05:07
【问题描述】:

所以我正在使用一个值为 16M 而不是 16,000,000 的数据集。如何找到其他货币符号?这个数据集很大,所以手动检查是不可行的。谢谢!

以下是前 250 个样本。数据集的结构如下: 国家、年份、GDP(美元)和数据分类(GDP)。

structure(list(country = c("Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", "Aruba", 
"Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", 
"Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", 
"Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", 
"Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", 
"Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", 
"Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", 
"Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", 
"Afghanistan"), year = c("1799", "1800", "1801", "1802", "1803", 
"1804", "1805", "1806", "1807", "1808", "1809", "1810", "1811", 
"1812", "1813", "1814", "1815", "1816", "1817", "1818", "1819", 
"1820", "1821", "1822", "1823", "1824", "1825", "1826", "1827", 
"1828", "1829", "1830", "1831", "1832", "1833", "1834", "1835", 
"1836", "1837", "1838", "1839", "1840", "1841", "1842", "1843", 
"1844", "1845", "1846", "1847", "1848", "1849", "1850", "1851", 
"1852", "1853", "1854", "1855", "1856", "1857", "1858", "1859", 
"1860", "1861", "1862", "1863", "1864", "1865", "1866", "1867", 
"1868", "1869", "1870", "1871", "1872", "1873", "1874", "1875", 
"1876", "1877", "1878", "1879", "1880", "1881", "1882", "1883", 
"1884", "1885", "1886", "1887", "1888", "1889", "1890", "1891", 
"1892", "1893", "1894", "1895", "1896", "1897", "1898", "1899", 
"1900", "1901", "1902", "1903", "1904", "1905", "1906", "1907", 
"1908", "1909", "1910", "1911", "1912", "1913", "1914", "1915", 
"1916", "1917", "1918", "1919", "1920", "1921", "1922", "1923", 
"1924", "1925", "1926", "1927", "1928", "1929", "1930", "1931", 
"1932", "1933", "1934", "1935", "1936", "1937", "1938", "1939", 
"1940", "1941", "1942", "1943", "1944", "1945", "1946", "1947", 
"1948", "1949", "1950", "1951", "1952", "1953", "1954", "1955", 
"1956", "1957", "1958", "1959", "1960", "1961", "1962", "1963", 
"1964", "1965", "1966", "1967", "1968", "1969", "1970", "1971", 
"1972", "1973", "1974", "1975", "1976", "1977", "1978", "1979", 
"1980", "1981", "1982", "1983", "1984", "1985", "1986", "1987", 
"1988", "1989", "1990", "1991", "1992", "1993", "1994", "1995", 
"1996", "1997", "1998", "1999", "2000", "2001", "2002", "2003", 
"2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011", 
"2012", "1799", "1800", "1801", "1802", "1803", "1804", "1805", 
"1806", "1807", "1808", "1809", "1810", "1811", "1812", "1813", 
"1814", "1815", "1816", "1817", "1818", "1819", "1820", "1821", 
"1822", "1823", "1824", "1825", "1826", "1827", "1828", "1829", 
"1830", "1831", "1832", "1833", "1834"), value = c("16.9M", "16.9M", 
"16.9M", "16.9M", "16.9M", "16.9M", "16.9M", "16.9M", "16.9M", 
"16.9M", "16.9M", "16.9M", "16.9M", "16.9M", "16.9M", "16.9M", 
"16.9M", "16.9M", "16.9M", "16.9M", "16.9M", "17.1M", "17.3M", 
"17.5M", "17.7M", "17.9M", "18.1M", "18.4M", "18.6M", "18.8M", 
"19M", "19.3M", "19.5M", "19.7M", "19.9M", "20.2M", "20.4M", 
"20.7M", "20.9M", "21.2M", "21.4M", "21.7M", "21.9M", "22.2M", 
"22.4M", "22.7M", "23M", "23.3M", "23.5M", "23.8M", "24.1M", 
"24.4M", "24.7M", "25M", "25.3M", "25.6M", "25.9M", "26.2M", 
"26.5M", "26.8M", "27.1M", "27.4M", "27.8M", "28.1M", "28.4M", 
"28.8M", "29.1M", "29.5M", "29.8M", "30.2M", "30.5M", "30.9M", 
"31.3M", "31.6M", "32M", "32.4M", "32.8M", "33.1M", "33.5M", 
"34M", "34.4M", "34.8M", "35.2M", "35.6M", "36M", "36.4M", "36.9M", 
"37.3M", "37.8M", "38.2M", "38.7M", "39.1M", "39.6M", "40M", 
"40.5M", "41M", "41.5M", "42M", "42.5M", "43M", "43.5M", "44M", 
"44.5M", "45.1M", "45.6M", "46.2M", "46.7M", "47.3M", "47.8M", 
"48.4M", "49M", "49.5M", "50.1M", "50.7M", "52.3M", "53.8M", 
"55.4M", "57.1M", "58.8M", "60.5M", "62.3M", "64.2M", "66.1M", 
"68.1M", "70.1M", "72.2M", "74.4M", "76.6M", "78.9M", "81.3M", 
"83.7M", "86.2M", "88.8M", "91.4M", "94.2M", "97M", "99.9M", 
"103M", "106M", "109M", "112M", "116M", "119M", "123M", "126M", 
"130M", "134M", "138M", "142M", "146M", "151M", "155M", "162M", 
"171M", "182M", "196M", "210M", "226M", "243M", "259M", "274M", 
"287M", "298M", "308M", "317M", "327M", "337M", "347M", "358M", 
"369M", "380M", "413M", "450M", "490M", "533M", "579M", "628M", 
"679M", "734M", "795M", "861M", "934M", "1.02B", "1.1B", "1.2B", 
"1.31B", "1.43B", "1.66B", "1.98B", "2.21B", "2.3B", "2.48B", 
"2.61B", "2.79B", "3.02B", "3.1B", "3.16B", "3.43B", "3.7B", 
"3.76B", "3.94B", "3.92B", "3.81B", "3.8B", "4.07B", "4.11B", 
"4.13B", "4.23B", "4.07B", "3.79B", "3.58B", "3.9B", NA, NA, 
"2.08B", "2.08B", "2.08B", "2.08B", "2.08B", "2.08B", "2.08B", 
"2.08B", "2.08B", "2.08B", "2.08B", "2.08B", "2.08B", "2.08B", 
"2.08B", "2.08B", "2.08B", "2.08B", "2.08B", "2.08B", "2.08B", 
"2.1B", "2.12B", "2.13B", "2.15B", "2.17B", "2.19B", "2.2B", 
"2.22B", "2.24B", "2.26B", "2.28B", "2.3B", "2.32B", "2.33B", 
"2.35B"), dataset = c("GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", "GDP", 
"GDP")), row.names = c(NA, -250L), class = c("tbl_df", "tbl", 
"data.frame"))

【问题讨论】:

  • grep("^[[:digit:]]+[[:alpha:]]+", x, ignore.case = TRUE) 将给出以一个或多个数字开头后跟至少一个字母的所有字符串。
  • 还有哪些其他货币符号?尝试制作一个reproducible example,这样可以更好地显示您正在尝试做的事情
  • 我添加了数据集的屏幕截图 - 我仍在学习如何为该网站创建可重现的示例。
  • 如果您已经将数据集导入到 R 中,那么 dput(head(my_data, n = 50)) 将重现前 50 行(或任何足以满足 n 的行)。
  • @Greg,是的,您可以将其发布为答案-效果很好。再次感谢!

标签: r


【解决方案1】:

通过OPrequest,我发布了我的informal solution 以回答具体问题

如何找到其他货币符号?

GDPLong_dfvalue 列中,我只需删除数字(可能是十进制)“前缀”,将剩余文本保留为“后缀”。

# Extract the denotation suffixes.
currency_denotations <- unique(gsub(pattern = "^\\d+(.\\d+)*", replacement = "",
                                    x = GDPLong_df$value))
# OPTIONALLY: Remove NAs if desired.
currency_denotations <- currency_denotations[!is.na(currency_denotations)]

应用于 OP 的样本数据,currency_denotations 的输出为我们提供了外延

"M" "B"

不包括由values 产生的任何NAs,而这些NA 开头是NA

注意

进一步的正则表达式操作可用于

  • 空白控制
  • 确保“后缀”严格按字母顺序排列
  • 控制逗号作为千位分隔符 ("1,234")
  • 将逗号控制为小数“点”("16,9M")

但 OP 已经有confirmed 现有的解决方案足以满足他们的需求。

警告

converting 来自“十亿”(和“万亿”等)等术语时应谨慎使用,因为它们的大小根据不同国家使用的约定而有所不同:即long and short scales。比如前者用“十亿”来形容10^12,而后者用它来形容10^9。但是,我认为 OP 的数据集在 value 列中使用标准化约定。

【讨论】:

    【解决方案2】:

    这是一种提取字母数字后缀并将其含义乘以数字的方法。

    library(tidyverse)
    df1 %>%
      mutate(mult_txt = value %>% str_extract("[a-z]|[A-Z]"),
             multiplier = case_when(
               mult_txt == "B" ~ 1E9,
               mult_txt == "M" ~ 1E6,
               TRUE ~ 1),
             value_adj = parse_number(value) * multiplier)
    

    结果

    # A tibble: 250 x 7
       country year  value dataset mult_txt multiplier value_adj
       <chr>   <chr> <chr> <chr>   <chr>         <dbl>     <dbl>
     1 Aruba   1799  16.9M GDP     M           1000000  16900000
     2 Aruba   1800  16.9M GDP     M           1000000  16900000
     3 Aruba   1801  16.9M GDP     M           1000000  16900000
     4 Aruba   1802  16.9M GDP     M           1000000  16900000
     5 Aruba   1803  16.9M GDP     M           1000000  16900000
     6 Aruba   1804  16.9M GDP     M           1000000  16900000
     7 Aruba   1805  16.9M GDP     M           1000000  16900000
     8 Aruba   1806  16.9M GDP     M           1000000  16900000
     9 Aruba   1807  16.9M GDP     M           1000000  16900000
    10 Aruba   1808  16.9M GDP     M           1000000  16900000
    # … with 240 more rows
    

    ...以及具有更多值的测试:

    options(scipen = 999) # so the output isn't shown in scientific notation
    data.frame(value = c("16.9M", "900000", "192.0Z", "3B")) %>%
      mutate(mult_txt = value %>% str_extract("[a-z]|[A-Z]"),
             multiplier = case_when(
               mult_txt == "B" ~ 1E9,
               mult_txt == "M" ~ 1E6,
               TRUE ~ 1),
             value_adj = parse_number(value) * multiplier)
    
       value mult_txt multiplier  value_adj
    1  16.9M        M    1000000   16900000
    2 900000     <NA>          1     900000
    3 192.0Z        Z          1        192
    4     3B        B 1000000000 3000000000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多