По моему мнению, принятый в настоящее время ответ только изменяет порядок уровней фактора , а не фактические метки (т. е. как называются уровни фактора) , Чтобы проиллюстрировать разницу между уровнями и , рассмотрим следующий пример:
Поверните cyl
в коэффициент (задающие уровни не нужны, поскольку они кодируются в алфавитно-цифровом порядке):
mtcars2 <- mtcars %>% mutate(cyl = factor(cyl, levels = c(4, 6, 8)))
mtcars2$cyl[1:5]
#[1] 6 6 4 6 8
#Levels: 4 6 8
Измените порядок уровней (но не сами метки: cyl все еще один и тот же столбец)
mtcars3 <- mtcars2 %>% mutate(cyl = factor(cyl, levels = c(8, 6, 4)))
mtcars3$cyl[1:5]
#[1] 6 6 4 6 8
#Levels: 8 6 4
all(mtcars3$cyl==mtcars2$cyl)
#[1] TRUE
Назначьте новые ярлыки cyl
Порядок меток был: c (8, 6, 4), поэтому мы указываем новые метки следующим образом:
mtcars4 <- mtcars3 %>% mutate(cyl = factor(cyl, labels = c("new_value_for_8",
"new_value_for_6",
"new_value_for_4" )))
mtcars4$cyl[1:5]
#[1] new_value_for_6 new_value_for_6 new_value_for_4 new_value_for_6 new_value_for_8
#Levels: new_value_for_8 new_value_for_6 new_value_for_4
Обратите внимание, что этот столбец отличается от наших первых столбцов:
all(as.character(mtcars4$cyl)!=mtcars3$cyl)
#[1] TRUE
#Note: TRUE here indicates that all values are unequal because I used != instead of ==
#as.character() was required as the levels were numeric and thus not comparable to a character vector
Подробнее:
Если мы изменили уровни cyl
, используя mtcars2
вместо mtcars3
, нам нужно было бы указать метки по-разному получить тот же результат. Порядок меток для mtcars2
был: c (4, 6, 8), поэтому мы указываем новые метки следующим образом
#change labels of mtcars2 (order used to be: c(4, 6, 8)
mtcars5 <- mtcars2 %>% mutate(cyl = factor(cyl, labels = c("new_value_for_4",
"new_value_for_6",
"new_value_for_8" )))
В отличие от mtcars3$cyl
и mtcars4$cyl
, метки из mtcars4$cyl
и mtcars5$cyl
, таким образом, идентичны, хотя их уровни имеют другой порядок.
mtcars4$cyl[1:5]
#[1] new_value_for_6 new_value_for_6 new_value_for_4 new_value_for_6 new_value_for_8
#Levels: new_value_for_8 new_value_for_6 new_value_for_4
mtcars5$cyl[1:5]
#[1] new_value_for_6 new_value_for_6 new_value_for_4 new_value_for_6 new_value_for_8
#Levels: new_value_for_4 new_value_for_6 new_value_for_8
all(mtcars4$cyl==mtcars5$cyl)
#[1] TRUE
levels(mtcars4$cyl) == levels(mtcars5$cyl)
#1] FALSE TRUE FALSE
Для этого вам понадобится внутренний диктат класса:
print(TrackingMeasure.__dict__[x])
getattr (объект, строка)
this_tm = TrackingMeasure
for x in tracking_refs:
print(getattr(this_tm,x))
Вы можете использовать getattr
:
tracking_refs = ['Touches','DefensiveImpact']
for x in tracking_refs:
print(getattr(TrackingMeasure, x))