我目前正在对我的数据集中的分类变量进行规范化。
我必须将汽车的传输标准化为手动或自动。
我的初始数据看起来像这样(注意这是化妆数据)
Make | Transmission | Price
BWM 6 Speed Automatic 50000
TOYOTA 5 Speed Automatic 40000
BWM 7 Speed Manual 70000
NISSAN 3 Speed Automatic 50000
TOYOTA 5 Speed Manual 30000
我的目标是将包含自动的任何传输转换为"自动"以及包含Manual to" Manual"
的传输我目前的做法是使用gsub()
df$Transmission <- gsub("6 Speed Automatic", "Automatic", df$Transmission)
df$Transmission <- gsub("5 Speed Automatic", "Automatic", df$Transmission)
df$Transmission <- gsub("3 Speed Automatic", "Automatic", df$Transmission)
df$Transmission <- gsub("7 Speed Manual", "Manual", df$Transmission)
df$Transmission <- gsub("5 Speed Manual", "Manual", df$Transmission)
在真正的daaset中,有许多不同类型的自动和手动传输。我不认为复制粘贴gsub()函数是有效的。
我试图找到一种替换使用正则表达式的方法,但我能做的最好的就是使用dplyr过滤器识别它们
filter(df, grepl("Automatic", Transmission))
无论如何,我可以将包含Automatic的字符串替换为&#34; Automatic&#34;和包含手册的字符串&#34;手册&#34;。在我的情况下,使用多个gsub完全没有效率。
答案 0 :(得分:1)
这是一种快速的数据表。
library(data.table)
Make <- c('BWM','TOYOTA','BWM','NISSAN','TOYOTA')
Transmission <- c('Speed Automatic','Speed Automatic','Speed Manual','Speed Automatic','Speed Manual')
DT <- data.table(Make = Make, Transmission = Transmission)
DT[, Transmission_new := ifelse(Transmission == 'Speed Automatic',
'Automatic', 'Manual')]
> DT
Make Transmission Transmission_new
1: BWM Speed Automatic Automatic
2: TOYOTA Speed Automatic Automatic
3: BWM Speed Manual Manual
4: NISSAN Speed Automatic Automatic
5: TOYOTA Speed Manual Manual
答案 1 :(得分:1)
假设:
以下内容应该有效:
df %>%
mutate(Transmission2 = case_when(
grepl("Automatic", Transmission) ~ "Automatic",
grepl("Manual", Transmission) ~ "Manual",
TRUE ~ ""))
数据:
df <- read.csv(
text = "Make, Transmission, Price
BWM, 6 Speed Automatic, 50000
TOYOTA, 5 Speed Automatic, 40000
BWM, 7 Speed Manual, 70000
NISSAN, 3 Speed Automatic, 50000
TOYOTA, 5 Speed Manual, 30000"
)
答案 2 :(得分:1)
另一种方式:
> df <- data.table(Transmission = c('6 Speed Automatic',
'5 Speed Automatic',
'7 Speed Manual',
'3 Speed Automatic',
'5 Speed Manual'))
> df[, Transmission := str_extract(string = Transmission, pattern = 'Automatic|Manual')]
> df
Transmission
1: Automatic
2: Automatic
3: Manual
4: Automatic
5: Manual