2015-05-21 3 views
0

У меня есть одна переменная, которую я пытаюсь свести к более управляемой длине значений. Я экспортировал список уникальных значений переменной в файл csv и присвоил им более общие имена в соседнем столбце. НАПРИМЕР,R, создавая новую переменную, сопоставляя переменную в двух наборах данных

EVTYPE new_category 

- x1 x 
- x2 x 
- x3 x 
- x4 x 
- y1 y 
- y2 y 
- y3 y 

Затем я загрузил это обратно в R, и я пытаюсь создать новую переменную, где, если old_val = x1, new_var2 = х, и так далее. В переменной old_val имеется около 1000 уникальных значений, поэтому вложение ifelse-операторов или что-то подобное действительно невозможно. Вот некоторый код, над которым я работаю, но пока не могу работать, где dataset = общий набор данных и new_data = набор данных с уникальными значениями: (Извините за плохое форматирование, не уверен, как правильно это сделать для приведенного выше списка)

ND_row_count <- NROW(new_data) 
for (i in 1:ND_row_count){ 
    if (dataset$EVTYPE==new_data$EVTYPE2[i]) { 
    dataset$new_category <- new_data$new_category[i] 
    } 
} 

ответ

2

Для этого вы можете использовать векторную функцию, match.

Следующие должны возвращать (и присваивать dataset$new_category) вектор новых категорий, соответствующих вашему длинному вектору оригинальных значений.

dataset$new_category <- new_data$new_category[match(dataset$EVTYPE, new_data$EVTYPE2)] 

Выше, match находки, для каждого элемента dataset$EVTYPE позиции согласующего элемента new_data$EVTYPE2. Затем мы используем этот вектор индексов к подмножеству new_data$new_category.

+0

Это работает, спасибо! – user3711502

Смежные вопросы