我有一个数据框,其中有一列包含混合字符(单词)和罗马数字的观察结果。它也有整数,只有字符(如观察“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”。我想避免这种情况。
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"