Переключение значений на метки в новом столбце - PullRequest
0 голосов
/ 29 января 2020

Я получил столбец помеченных значений. Давайте назовем это страной. Когда я запускаю:

attr(dat[["Country"]], "labels")

, я получаю следующую таблицу:

USA      Germany       France           UK        Spain        India Saudi Arabia 
  1            2            3            4            5            6            7 

Теперь я получил новый столбец значений int, которые не помечены. Давайте назовем это новой страной. Я хотел бы изменить эти значения int на метку исходного столбца Country. Другими словами, я хотел бы go из этого эффективным способом ...

3 2 2 1 5 4

к этому ...

Франция Германия Германия США Испания Великобритания

1 Ответ

1 голос
/ 29 января 2020

Проблема в том, что во фрейме данных есть столбец Country с установленным атрибутом "labels". В свою очередь, этот атрибут, который является просто вектором, имеет установленный атрибут "names". Итак, шаги для получения "names" из "labels":

  1. Получить "labels" столбца Country;
  2. Получить "names" вектора
  3. Извлечение имен, соответствующих вектору индексов, вектору i.

Первое чтение в опубликованных данных.

nms <- scan(text = "USA Germany France UK Spain India 'Saudi Arabia'",
            what = character())
i <- scan(text = "3 2 2 1 5 4")

Теперь создайте пример набора данных.

labs <- setNames(1:7, nms)
dat <- data.frame(Country = sample(letters, 7))
attr(dat[["Country"]], "labels") <- labs

И извлеките то, о чем просит вопрос, следуя приведенным выше шагам.

labsCountry <- attr(dat[["Country"]], "labels")
names(labsCountry)[i]
#[1] "France"  "Germany" "Germany" "USA"     "Spain"   "UK"

Или однострочник:

names(attr(dat[["Country"]], "labels"))[i]
#[1] "France"  "Germany" "Germany" "USA"     "Spain"   "UK"

Чтобы увидеть, что это не зависит от значений меток, создайте второй пример.

labs2 <- setNames(101:107, nms)
attr(dat[["Country"]], "labels") <- labs2

И хотя "labels" отличаются, работают те же самые инструкции:

attr(dat[["Country"]], "labels")
#         USA      Germany       France           UK        Spain        India Saudi Arabia 
#         101          102          103          104          105          106          107

labsCountry <- attr(dat[["Country"]], "labels")
names(labsCountry)[i]
...