将书面数字转换为R中的数字

2023-12-08

有谁知道将数字的文本表示形式转换为实际数字的函数,例如将“20305”转换为 20305。我已在数据帧行中写入数字,并希望将它们转换为数字。

在 qdap 包中,您可以用单词替换数字表示的数字(例如,1001 变为一千一),但反之则不然:

library(qdap)
replace_number("I like 346457 ice cream cones.")
[1] "I like three hundred forty six thousand four hundred fifty seven ice cream cones."

这是一个可以让你达到数十万的开始。

word2num <- function(word){
    wsplit <- strsplit(tolower(word)," ")[[1]]
    one_digits <- list(zero=0, one=1, two=2, three=3, four=4, five=5,
                       six=6, seven=7, eight=8, nine=9)
    teens <- list(eleven=11, twelve=12, thirteen=13, fourteen=14, fifteen=15,
                  sixteen=16, seventeen=17, eighteen=18, nineteen=19)
    ten_digits <- list(ten=10, twenty=20, thirty=30, forty=40, fifty=50,
                       sixty=60, seventy=70, eighty=80, ninety=90)
    doubles <- c(teens,ten_digits)
    out <- 0
    i <- 1
    while(i <= length(wsplit)){
        j <- 1
        if(i==1 && wsplit[i]=="hundred")
            temp <- 100
        else if(i==1 && wsplit[i]=="thousand")
            temp <- 1000
        else if(wsplit[i] %in% names(one_digits))
            temp <- as.numeric(one_digits[wsplit[i]])
        else if(wsplit[i] %in% names(teens))
            temp <- as.numeric(teens[wsplit[i]])
        else if(wsplit[i] %in% names(ten_digits))
            temp <- (as.numeric(ten_digits[wsplit[i]]))
        if(i < length(wsplit) && wsplit[i+1]=="hundred"){
            if(i>1 && wsplit[i-1] %in% c("hundred","thousand"))
                out <- out + 100*temp
            else
                out <- 100*(out + temp)
            j <- 2
        }
        else if(i < length(wsplit) && wsplit[i+1]=="thousand"){
            if(i>1 && wsplit[i-1] %in% c("hundred","thousand"))
                out <- out + 1000*temp
            else
                out <- 1000*(out + temp)
            j <- 2
        }
        else if(i < length(wsplit) && wsplit[i+1] %in% names(doubles)){
            temp <- temp*100
            out <- out + temp
        }
        else{
            out <- out + temp
        }
        i <- i + j
    }
    return(list(word,out))
}

Results:

> word2num("fifty seven")
[[1]]
[1] "fifty seven"

[[2]]
[1] 57

> word2num("four fifty seven")
[[1]]
[1] "four fifty seven"

[[2]]
[1] 457

> word2num("six thousand four fifty seven")
[[1]]
[1] "six thousand four fifty seven"

[[2]]
[1] 6457

> word2num("forty six thousand four fifty seven")
[[1]]
[1] "forty six thousand four fifty seven"

[[2]]
[1] 46457

> word2num("forty six thousand four hundred fifty seven")
[[1]]
[1] "forty six thousand four hundred fifty seven"

[[2]]
[1] 46457

> word2num("three forty six thousand four hundred fifty seven")
[[1]]
[1] "three forty six thousand four hundred fifty seven"

[[2]]
[1] 346457

我已经可以告诉你这对word2num("four hundred thousand fifty"),因为它不知道如何处理连续的“百”和“千”项,但算法可能可以修改。如果任何人有改进或在自己的答案中进行改进,都可以随意编辑此内容。我只是觉得这是一个有趣的问题(玩一会儿)。

编辑:显然比尔·维纳布尔斯有一个名为english这可能比上面的代码更好地实现这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将书面数字转换为R中的数字 的相关文章

  • 访问 R 工作区中的数据[重复]

    这个问题在这里已经有答案了 我是自学 R 的 可能有一些非常基本的东西我可能不熟悉 如果是这样我道歉 我正在尝试访问外部来源提供给我的数据 它作为一个工作空间出现 我的流程如下 gt ls 1 2003OHT HR gt attach 20
  • rpart是自动剪枝吗?

    Is rpart自动修剪 生成的决策树rpart比具有自动修剪功能的 Oracle Data Mining 生成的级别要多得多 否 但拟合函数的默认值可能会 提前 停止分割 对于 早期 的某些定义 See rpart control对于您可
  • 在 Shiny 中叠加两个 ggplot

    我有一个非常大的数据集 我正在使用 ggplot 在 Shiny 上绘制它 我有一个与 x 轴上的值相关联的滑块 我想用它对选定的数据子集重新着色 并让其余数据保持原样 最简单的选择是重新创建整个绘图 但由于它是一个大型数据集 因此这是一个
  • stat_function 从函数生成平线

    我有以下代码 library ggplot2 f lt function x if x gt 2 1 x 0 3 else 0 graph lt ggplot data frame x c 0 10 aes x graph lt graph
  • 将不同的 grViz 组合成一个图

    我想结合不同的DiagrammeR绘制成一个图形 生成的图如下例所示 library DiagrammeR pDia lt grViz digraph boxes and circles a graph statement graph ov
  • 美人鱼图:调整图表周围的空白

    我在用 Rstudio 编译的 Rmd 报告中使用了美人鱼图 在 HTML PDF 输出中 图表上方和下方有大量空白 请参见下面的示例 Header Text r library DiagrammeR mermaid graph TD cl
  • 如何有效地将多个光栅 (.tif) 文件导入 R

    我是 R 新手 尤其是在空间数据方面 我正在尝试找到一种方法来有效地将多个 600 单波段栅格 tif 文件导入到 R 中 所有文件都存储在同一文件夹中 不确定这是否重要 但请注意 在我的 Mac 和 Windows 并行 VM 上的文件夹
  • R:ifelse 中的字符串列表

    我正在寻找与 MySQL 中的 where var in 语句类似的东西 我的代码如下 data lt data frame id 10001 10030 cc1 rep c a b c 10 attach data data new lt
  • 如何在R中匹配具有相同主键的两个表中的数据

    我有两个表 其中包含有关人员的数据 df1 lt data frame id c 113 202 377 288 359 name c Alex Silvia Peter Jack Jonny 这为我提供了 id name 1 113 Al
  • RStudio 不会通过 rPython 调用加载所有 Python 模块

    我从 Bash 和 RStudio 中运行相同的脚本时出现一些意外行为 请考虑以下事项 我有一个文件夹 rpython 包含两个脚本 test1 R library rPython setwd rpython python load tes
  • R参考类问题

    我正在尝试在 R 中创建一个简单的参考类 这是我的代码 R 初学者 MyClass lt setRefClass MyClass fields list a numeric b numeric methods list initialize
  • 如何从数据框中删除少于 5 个观察值的个体 [重复]

    这个问题在这里已经有答案了 为了澄清这个问题 我将简要描述数据 中的每一行data frame是一个观察值 列代表与该观察值相关的变量 包括 观察到什么个体 观察时间 观察地点等 我想排除 过滤观察值少于 5 个的个体 换句话说 如果 in
  • 在 Lavaan 生长曲线模型中提取个体轨迹

    我已经使用 R 的 Lavaan 包中的 Growth 函数成功地对一项研究的纵向数据进行了建模 我找不到任何关于如何提取每个参与者的预测轨迹的记录 我只能找到整个组的预测轨迹 在摘要输出的 拦截 部分下给出 使用 lavPredict m
  • 通过 r markdown 中的循环创建代码片段

    如同如何使用R中的knitr创建一个包含代码块和文本的循环 https stackoverflow com questions 36373630 how to create a loop that includes both a code
  • R data.table fwrite 到 fread 空间分隔符并清空

    我在使用 fread 以 作为分隔符和散布的空白值时遇到问题 例如 这个 dt lt data table 1 5 1 5 1 5 make a simple table dt 3 V2 NA add a blank in the midd
  • 通过 R 中的数据子集执行计算

    我想对数据框的 PERMNO 列中的每个公司编号进行计算 其摘要可以在此处查看 gt summary companydataRETS PERMNO RET Min 10000 Min 0 971698 1st Qu 32716 1st Qu
  • rvest 和 NHL 统计数据的 CSS 选择器问题

    我想从 hockey reference com 中抓取数据 特别是从以下链接中抓取数据 https www hockey reference com leagues NHL 1991 html https www hockey refer
  • R 编程常用工具

    如果已经以不同的方式问过这个问题 我深表歉意 但我找不到任何达到我想要的东西 我真的是从其他软件包 SPSS 开始接触 R 的 当我了解真正可以做什么时 我意识到我还需要其他 工具 这让我想到了我的问题 您有哪些用于开发 R 代码的设置 我
  • 如何将同一行中以逗号分隔的值拆分到R中的不同行

    我有一些数据来自谷歌表格 https forms gle rGQQL3tvA1PrE4dD8我想拆分以逗号分隔的答案 and 复制参与者的 ID 数据如下 gt head data names Q2 Q3 Q4 1 PART 1 fruit
  • 如何在 R 中将字符串解析为层次结构或树

    有没有办法将表示组的字符串解析为 R 中的层次结构 假设我的小组结构如下 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 3 1 1 3 1 1 1 3 2 1 1 3 3 1 2 1 2 1 1 2 1 1 1 2 1 2 1

随机推荐

  • 从宽到长返回空输出 - Python 数据框

    我有一个数据框 可以从下面给出的代码生成 df pd DataFrame person id 1 2 3 date1 12 31 2007 11 25 2009 10 06 2005 val1 2 4 6 date2 12 31 2017
  • NativeApplicationClient 不受任何支持

    当在我的 Visual Studio Winform 项目中使用此代码时 var provider new NativeApplicationClient GoogleAuthenticationServer Description Cli
  • Python,安装 matplotlib 时出错

    操作系统 Windows 10 Python版本 3 9 0 错误代码 ERROR Command errored out with exit status 1 python setup py egg info Check the logs
  • 使用flock和lockfile在bash中锁定文件

    我花了一天的大部分时间寻找这个问题的解决方案 我想我已经接近边缘了 我需要在 bash 中做的是 编写 1 个脚本 该脚本将定期读取您的输入并将它们写入文件中第二个脚本将定期打印出完整的文件 但仅当写入新内容时 这意味着它永远不会一个接一个
  • Android RadioGroup 检查多个 RadioButton?

    我在用RadioGroup added RadioButton rdbut to RadioGroup rdgrp like rdgrp addView rdbut for int j 0 j lt 3 j RadioGroup rdgrp
  • 使用关联标签/单元提取数据

    我一直在尝试分离出隐藏在文本句子中的关键数据 例如 我已经使用以下代码取得了一些进展 但它也提取了不需要的值 let Source Excel CurrentWorkbook Name Table3 Content Changed Type
  • 写行方法

    我有一个日志文件 txt 其中包含以下信息 Filename1 A3332NCDER Filename2 B3332NCDER Filename3 B1222NCDERE Filename4 C1222NCDER Filename4 C12
  • 在 pip jnius 安装中找不到 JRE_HOME

    正在尝试安装jnius来自 pip 这是一个要求pip install sikuli 这是我尝试安装时遇到的错误 变量定义是否正确 有谁明白为什么它一直说找不到JRE HOME Edit 我的路径变量是 setup py 包含 jdk ho
  • 这个 PHP 随机数库如何工作?

    From http fullthrottledevelopment com php nonce library download 有一个PHP nonce库 但是有一些东西我不知道理解 第一个是它提醒我们为FT NONCE UNIQUE K
  • 如何终止与 grep 匹配时间超过 30 分钟的进程?

    我有一组并行运行的进程 有时 有些内容的停留时间会超过脚本允许的时间 time start microtime true max run time 30 60 30 minutes measured in seconds while mic
  • 如何使用 Exchange Web 服务托管 API 设置联系人头衔

    我正在尝试使用 EWS API 创建新联系人 我可以设置除联系人标题属性之外的所有所需值 我尝试了代码 oContact new Contact oService oContact GivenName John oContact Surna
  • 使用 NLB 和 IAM 身份验证公开 AWS MSK - 主机名验证失败

    我们正在努力让 Amazon MSK Kafka 与 IAM 身份验证配合使用 然后使用 aws kafka 广告侦听器中的更改通过 DNS 公开访问它 为了实现这一点 我们遵循如下相同的基础设施计划 但我们不使用接口端点 而是使用网络负载
  • 如何以编程方式创建和管理 macOS Safari 书签?

    我正在制作一个脚本 它会更新我的 macOS Safari 上的书签 以便始终将我订阅的所有 Reddit 子版块作为特定文件夹中的单独书签 我已经将所有 subreddits 作为 Python 中元组的排序列表 将所需的书签名称作为第一
  • SML 中绑定的价值?

    有人可以解释一下为什么评估后 and 的值一定是 16 这是正确的答案吗 我认为答案 3 是因为我们调用函数 f 并将值 1 和 2 作为函数 f 发送 但看不到值 5 和 10 但我想我错了 val x 1 val y 2 val f f
  • 在 SwiftUI 中将 NavigationButton 与服务器请求结合使用

    我怎样才能做一个NavigationButton在进入下一个视图之前等待服务器响应 我尝试过这样的事情 NavigationButton destination LogonView onTrigger gt Bool in return s
  • 如何从远程服务器加载图像到iPhone中的UIImageView上?

    我正在尝试从应用程序中的 UIImageView 上的远程服务器加载图像 是否可以从远程服务器加载图像 我正在使用以下代码 id path http upload wikimedia org wikipedia commons c c7 S
  • 在 Swift 中,无主引用与弱引用[重复]

    这个问题在这里已经有答案了 如果你有一个Dog弱引用Bone 这意味着在这种情况下 Dog 是引用的 所有者 并且它使用骨骼 但是骨骼可以不存在 而 Dog 仍然可以运行 因为对骨骼的引用是可选的 然而 对于 无主 关键字 无主 似乎不是在
  • 从 php 循环绘制多个图表(Chart.js)以读取多个文件

    我一直在尝试使用 Chart js 从 php 循环绘制多个图表 事实证明 Chart js 只会将数据聚集在一个画布 第一个画布 中 其他画布最终会变成空白 我觉得我已经很接近了 但还没有完全实现 有人可以帮助我吗 提前致谢 这是我的代码
  • 创建 PHP PDO 数据库类,OOP 遇到麻烦

    这是我当前的数据库类 class Database private db function Connect db host localhost db name database1 db user root db pass root try
  • 将书面数字转换为R中的数字

    有谁知道将数字的文本表示形式转换为实际数字的函数 例如将 20305 转换为 20305 我已在数据帧行中写入数字 并希望将它们转换为数字 在 qdap 包中 您可以用单词替换数字表示的数字 例如 1001 变为一千一 但反之则不然 lib