根据单词拆分列中的数据
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)
:肯定的先行断言要 extract
ed 的匹配必须后跟文字字符串 GHz
是否有代码可以创建一个只有速度数字的列?在 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)
:肯定的先行断言要extract
ed 的匹配必须后跟文字字符串GHz