grep()
возвращает вектор индексов записей, которые соответствуют заданным критериям.
Единственный способ, которым ваш код мог бы работать здесь, - это если число строк data
равно некоторому, даже кратномучисло совпадений grep()
находок.
Рассмотрим следующий воспроизводимый пример:
data = data.frame(RAW_MATERIAL_DIMENSION = c("BAC","bBAC","aBAC","BACK","lbd"))
> data
RAW_MATERIAL_DIMENSION
1 BAC
2 bBAC
3 aBAC
4 BACK
5 lbd
> grep("^BAC",data$RAW_MATERIAL_DIMENSION)
[1] 1 4
data$CleanDim <- data$RAW_MATERIAL_DIMENSION[grep("^BAC",data$RAW_MATERIAL_DIMENSION)]
Error in `$<-.data.frame`(`*tmp*`, CleanDim, value = 1:2) :
replacement has 2 rows, data has 5
Примечание: это сработает нормально (хотя это будет довольно странно), если оригинал data
У объекта только что были первые четыре строки.В этом случае вы просто получите повторные значения, заполненные в вашем новом столбце.
Но здесь вы хотите посмотреть на результаты grep("^BAC",data$RAW_MATERIAL_DIMENSION)
и подумать о том, что будет разумнов вашем контексте.Ваша операция будет работать, только если длина этого результата равна длине вашего data
объекта или, по крайней мере, если ваш объект данных кратен этой длине.