根据单词拆分列中的数据

Splitting data in column based on a word

是否有代码可以创建一个只有速度数字的列?在 Cpu 列中,如图所示,对我来说包含了太多不必要的信息。我只想要“'Ghz'”数字(f.i。2.3、1.8 和 2.5)。

你可以这样做:

library(stringr)

data %>%
  mutate(speed = as.numeric(str_extract(Cpu, "\d*[.]?\d+(?=GHz$)")))

我认为另一个答案更好,但使用复杂正则表达式的另一种方法是使用 stringr 包仅提取“GHz”之前的 3 个位置:

数据:

df <- data.frame(ScreenResolution = paste("Test",LETTERS[1:3]),
                 Cpu = c("Intel Core i5 2.3GHz","Intel Core i5 1.8GHz",
                         "Intel Core i5 72000U 2.3GHz"),
                 Ram = "8GB")

代码:

library(stringr)
df$Cpu_new <- str_sub(df$Cpu, str_locate(df$Cpu, pattern = "GHz")[1]-4,
                              str_locate(df$Cpu, pattern = "GHz")[1]-1)

输出:

#   ScreenResolution                         Cpu Ram Cpu_new
# 1           Test A        Intel Core i5 2.3GHz 8GB     2.3
# 2           Test B        Intel Core i5 1.8GHz 8GB     1.8
# 3           Test C Intel Core i5 72000U 2.3GHz 8GB     2.3

如果您希望它是数字,请使用 as.numeric(str_sub(...))

一个稍微简单的正则表达式是这样的:

library(dplyr)
library(stringr)
df %>%
  mutate(CPU_new = str_extract(Cpu, "[0-9.]+(?=GHz)"))

base R:

df$CPU_new <- str_extract(df$Cpu, "[0-9.]+(?=GHz)")

工作原理:

  • [0-9.]+: 字符class 允许数字和句点至少出现一次或多次
  • (?=GHz):肯定的先行断言要 extracted 的匹配必须后跟文字字符串 GHz