R语言 将具有\n和k值的字符串向量转换为具有

ehxuflar  于 2023-10-13  发布在  其他
关注(0)|答案(2)|浏览(126)

我有一个跟踪向量。其中,我们有\nk的数字数据,k代表1000

v <- c("2.2K\n", "3\n", "1K\n", "1", "45", "5\n")

> v
> [1] "2.2K\n" "3\n"    "1K\n"   "1"      "45"     "5\n"

我需要将上面的矢量转换为数字矢量,如下所示。

> v
 [1] "2200" "3"    "1000" "1"    "45"   "5"

有人能帮帮我吗?
当我使用下面的命令时,我解决了\n,但无法解决K

> as.numeric(v)
[1] NA  3 NA  1 45  5
nkoocmlb

nkoocmlb1#

可以使用scan + gsub

> as.numeric(scan(text = gsub("K", "e3", v), what = "", quiet = TRUE))
[1] 2200    3 1000    1   45    5
zphenhs4

zphenhs42#

不是删除,而是替换可能的10的幂,

sub(r'{(\d\.?\d?\w?).*}', '\\1', v) |> 
  stringi::stri_replace_all_regex(pat=c('K', "M"), rep=paste(c('e3', 'e6'))) |>
  as.numeric()
# [1] 2200    3 1000    1   45    5

在那里模式和替换可以被扩展。

相关问题