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

Convert string vector with \n and k values into numeric with

提问人:Hamid Alvi 提问时间:10/11/2023 最后编辑:Wiktor StribiżewHamid Alvi 更新时间:10/11/2023 访问量:32

问:

我有一个以下向量。其中,我们有 ,并用数值数据表示 1000\nkk

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"

谁能帮我?

当我使用以下命令时,我解决了 ,但无法解决 .\nK

> as.numeric(v)
[1] NA  3 NA  1 45  5
R 字符串 拆分 类型转换

评论


答:

2赞 ThomasIsCoding 10/11/2023 #1

你可以使用scan + gsub

> as.numeric(scan(text = gsub("K", "e3", v), what = "", quiet = TRUE))
[1] 2200    3 1000    1   45    5
1赞 jay.sf 10/11/2023 #2

获取而不是删除,替换可能的十次幂,

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

可以扩展图案和替换的地方。