объединяя grep с оператором if else - PullRequest
0 голосов
/ 06 июня 2018

У меня есть фрейм данных "данные".Я искал шаблон, используя функцию grep, и я хотел бы поместить результат обратно во фрейм данных, чтобы сопоставить строки с другими.

data$CleanDim<-data$RAW_MATERIAL_DIMENSION[grep("^BAC",data$RAW_MATERIAL_DIMENSION)]

Я хотел бы вставить результат в новый столбец data$CleanDim, но яполучить следующие ошибки .... может кто-нибудь, пожалуйста, помогите мне?

Error in `$<-.data.frame`(`*tmp*`, CleanDim, value = c(1393L, 1405L, 734L,  :  replacement has 2035 rows, data has 1881

1 Ответ

0 голосов
/ 06 июня 2018

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 объекта или, по крайней мере, если ваш объект данных кратен этой длине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...