gpt4 book ai didi

r - 按照一定的规则调整向量子集值

转载 作者:行者123 更新时间:2023-12-01 23:37:59 25 4
gpt4 key购买 nike

我正在尝试编写一个将中文数字转换为阿拉伯数字的函数。这个想法是获取一组 scaled_digit 向量和一组 scale_factor 向量,将它们相乘并相加以生成所需的输出。

digit=c('〇'=0,'一'=1,'二'=2,'三'=3,'四'=4,'五'=5,'六'=6,'七'=7,'八'=8,'九'=9)
scale=c('十'=10^1,'百'=10^2,'千'=10^3,'萬'=10^4,'億'=10^8,'兆'=10^12)

我遇到的一个问题是:

当我有一个数字是几百 10^4s (万) 和几千 10^12s (兆) 时,我剩下比例因子向量如下:

scale_factor=
structure(c(1000, 1e+12, 100, 10, 10000, 1000, 100, 10), .Names = c("千",
"兆", "百", "十", "萬", "千", "百", "十"))

[千] 兆 [百] [十] 萬 千 百 十
[1e+03] 1e+12 [1e+02] [1e+01] 1e+04 1e+03 1e+02 1e+01

要调整的比例因子已用[ ]标记。

基数 scale_factors 的位置可以通过以下代码找到:

cardinal_scale_factor=which(diff(scale_factor)>=0, T)+1

兆 萬
2 5

如何编写代码才能使 scale_factor[1]scale_factor[3:4] 可以乘以 scale_factor[2] 并且[5]分别是?


预期结果:

   [千]     兆    [百]    [十]    萬    千    百    十 
[1e+15] 1e+12 [1e+06] [1e+05] 1e+04 1e+03 1e+02 1e+01

最佳答案

可能的解决方案:

w1 <- which(rev(cummax(rev(scale_factor)) > rev(scale_factor)))

grp <- cumsum(c(1,diff(w1)) > 1) + 1

w2 <- aggregate(w1, list(grp), max)[[2]] + 1

scale_factor[w1] <- scale_factor[w1] * scale_factor[w2][grp]

给出:

> scale_factor
千 兆 百 十 萬 千 百 十
1e+15 1e+12 1e+06 1e+05 1e+04 1e+03 1e+02 1e+01

这是做什么的:

  1. 使用 cummax(rev(scale_factor)) 可以得到反向比例的累积最大值。
  2. 将其与反向比例 (cummax(rev(scale_factor)) > rev(scale_factor)) 进行比较,得到一个逻辑向量。
  3. 将第 2 步中的逻辑向量包装在 revwhich 随后,我们会得到一个位置 w1 不符合的索引向量递减条件。
  4. 使用 cumsum(c(1,diff(w1)) > 1) + 1,您可以针对示例数据中的第 3 个和第 4 个值对这些位置进行分组。
  5. 使用 aggregate(w1, list(grp), function(x) max(x) + 1)[[2]] 可以确定乘数的位置。
  6. 最后,将 w1 中确定的 scale_factor 中的值与 w2 中的乘数相乘。您需要使用 grp 中的组号索引 w2

关于r - 按照一定的规则调整向量子集值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50119413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com