2016-01-12 3 views
0

Я работаю с файловой рамкой, где каждый столбец имеет разные атрибуты. Можно ли сопоставить указанные атрибуты с вектором? Для контекста вы можете увидеть эту ситуацию, когда у вас есть необработанные данные и помеченные данные в виде вектора и атрибута метки.Отображение атрибутов значений в векторе

Вот пример с желаемым результатом:

foo = c(2,1,3,3,2,1) 
attr(foo, "mylevels") = c(1,2,3) 
attr(foo, "mylabels") = c("Red", "Blue", "Green") 

## foo 
## [1] 1 2 3 3 2 1 
## attr(,"mylevels") 
## [1] 1 2 3 
## attr(,"mylabels") 
## [1] "Red" "Blue" "Green" 

## attributes(foo) 
## $mylevels 
## [1] 1 2 3 

## $mylabels 
## [1] "Red" "Blue" "Green" 

Цель нечто вроде:

foo[attr(foo, "mylabels")] #(which doesn't work) 
"Blue" "Red" "Green" "Green" "Blue" "Red" 
+0

Может быть 'атр (Foo, "mylabels") <- as.character (фактор (Foo, лейблы = C ("Red", "Blue", "Зеленый")))' – akrun

+0

@akrun Хорошее предложение, но это просто переопределяет атрибут «mylabels». Возможно, я неправильно понимаю, как работают атрибуты, но похоже, что они должны быть уникальными. – Nancy

+0

Если вы создаете 'атрибут', ​​я не уверен, как он будет создан без маршрута' attr'. – akrun

ответ

1

Мы можем либо преобразовать 'Foo' в factor и указать levels

as.character(factor(foo, labels=c("Red", "Blue", "Green"))) 

Или используйте «foo» в качестве числового индекса для attr

attr(foo, "mylabels")[foo]