New-ish to R,我对数据清理有疑问。
我有一个列,其中包含汽车的驱动类型 - 四轮,全轮,两轮等
问题是没有标准化,所以有些行有4个WHEEL驱动器,4wd,4WD,四轮驱动器等等。
第一步很简单,即大写所有内容,但我遇到问题的步骤是将每个值更改为标准,如4WD,而无需重新编码每个独特的驱动器。
类似于列中的每个值,如果值LIKE / CONTAINS“FOUR”更改为“4WD”。
我研究过recode和stringdist并且变异但我找不到合适的东西。当我输入它时听起来我需要一个循环但不确定确切的语法。
如果解决方案可以与tidyverse一起使用,那就太棒了!
答案 0 :(得分:2)
欢迎使用StackOverflow!我已经回答了您的问题,但将来请提供一小部分数据样本,以便我们更轻松地解决您的问题。值得深思:How to make a reproducible example
require(plyr)
require(dplyr)
# Since you haven't provided a data sample, I'm going to assume your dataframe is named "DF" and your column's name is "Drive"
# Set everything to lowercase to pare down uniqueness
DF <- mutate(DF, Drive = replace(Drive, Drive, tolower(Drive)))
# You'll need one line like this for each replacement. Of the following form:
# <column_name> = replace(<column_name>, <condition>, <new value>)
DF <- mutate(DF, Drive = replace(Drive, Drive == "4 wheel drive", "4WD"))
答案 1 :(得分:2)
您可以使用ifelse
和grepl
。将grepl
的第一个参数更改为符合所有所需案例的内容。下面搜索包含“4”或“FOUR”的字符串
df$cleaned_col <- ifelse(grepl('4|four', df$colname_here, ignore.case = T), '4WD', df$colname_here)
如果您想进行多重比较,可能需要dplyr::case_when
使用%like%
来自data.table
require(dplyr);require(data.table)
df %>% mutate(cleaned = case_when(colname %like% 'a|b' ~ "there's an a or b in there"
, colname %like% 'c' ~ "has a c in it"
, T ~ "no a or b or c"))