如何在 R 的“混合”观察中识别罗马数字并将其转换为整数?

问题描述 投票:0回答:1

我有一个数据框,其中有一列包含混合字符(单词)和罗马数字的观察结果。它也有整数,只有字符(如观察“Apple”)和 NA,但我想保持不变。

所以它有这样的观察:

x <- data.frame(col = c("15", "NA", "0", "Red", "iv", "Logic", "ix. Sweet", "VIII - Apple", 
"Big XVI", "WeirdVII", "XI: Small"))

我想要的是把每一个有罗马数字的观察值(即使是和单词混在一起的)都转成整数。因此,按照示例,生成的数据框将如下所示:

15 北美 0 红色的 4个 逻辑 9 8个 16 7 11

有什么办法吗?

我尝试过的是:

library(stringr)
 
library(gtools)

roman <- str_extract(x$col, "([IVXivx]+)")

roman_to_int <- roman2int(roman)

x$col <- ifelse(!is.na(roman_to_int), roman_to_int, x$col)

然而,这不起作用,因为字符但不包括罗马整数的观察结果也变成了罗马数字,就像一个“逻辑”变成了“1”。我想避免这种情况。

r string integer character roman-numerals
1个回答
0
投票
str_replace_all(x$col, "[IVXLMCD]{2,}|\\b[ivxlmcd]+\\b", gtools::roman2int)

  [1] "15"        "NA"        "0"         "Red"       "4"        
  [6] "Logic"     "9. Sweet"  "8 - Apple" "Big 16"    "Weird7"   
  [11] "11: Small"
© www.soinside.com 2019 - 2024. All rights reserved.