我的列具有从 1 到 5 的不同评级,数字旁边有描述符。格式为“数字破折号描述符”,例如。 “1 - 非常高兴”或“5 - 饥饿”。我想仅用数字替换这些,但是有很多不同的描述符,而且太多,无法手动重新编码。
因为它们都包含破折号,所以我确信一定有一种方法可以做一些事情,比如将包含“1 -”的单元格的所有实例替换为“1”,但我似乎无法做任何简单的工作。
如有任何帮助,我们将不胜感激!
我可以使用 str_contains 查找包含破折号的单元格,但无法使用 dplyr 中的替换来实现这一点。
要从 R 中的文本字符串中提取数字,我将使用
{stringr}
包。
首先,让我们在一个简单的数据框中重现您的数据:
library(dplyr)
data <- tibble("values" = c("1 - very happy", "5 - hungry", "3 - average"))
我们可以使用
str_extract
包中的 {stringr}
从字符串中提取第一个字符,对字符串 (.
) 开头的任何字符 (^
) 使用正则表达式语法:
install.packages("stringr")
library(stringr)
data |>
mutate(numbers = stringr::str_extract(values, "^."))
或者,我们可以对
\\d+
中的任意数字(str_extract
)使用正则表达式,只从字符串中提取数字,无论它们位于字符串的哪个部分:
data |>
mutate(numbers = stringr::str_extract(values, "\\d+"))
最后,其他软件包(例如
{readr}
)具有帮助完成此类数据清理任务的功能:
data |>
mutate(numbers = readr::parse_number(values))