Есть ли более эффективный способ создать data.frame, содержащий описания каждой переменной в R? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть data.frame в R (давайте использовать в качестве примера встроенный набор данных "mtcars"), и я хотел бы найти более эффективный способ создания второго data.frame, содержащего описания каждой переменной ( т.е. некоторые основные метаданные) следующим образом:

Variables    Type                                   Labels
      mpg numeric                        Miles/(US) gallon
      cyl numeric                      Number of cylinders
     disp numeric                    Displacement (cu.in.)
       hp numeric                         Gross horsepower
     drat numeric                          Rear axle ratio
       wt numeric                        Weight (1000 lbs)
     qsec numeric                            1/4 mile time
       vs numeric      Engine (0 = V-shaped, 1 = straight)
       am numeric Transmission (0 = automatic, 1 = manual)
     gear numeric                  Number of forward gears
     carb numeric                    Number of carburetors

Приведенный ниже код указывает мой текущий метод получения data.frame с описаниями каждой переменной, включая имена переменных, типы элементов переменных и метки.

dat01 <- mtcars

Variables <- c(names(dat01))

#install.packages("Hmisc")
library(Hmisc)
var.labels = c(mpg="Miles/(US) gallon",
               cyl="Number of cylinders",
               disp="Displacement (cu.in.)",
               hp="Gross horsepower",
               drat="Rear axle ratio",
               wt="Weight (1000 lbs)",
               qsec="1/4 mile time",
               vs="Engine (0 = V-shaped, 1 = straight)",
               am="Transmission (0 = automatic, 1 = manual)",
               gear="Number of forward gears",
               carb="Number of carburetors")

label(dat01) <- as.list(var.labels[match(names(dat01), names(var.labels))])

Labels <- label(dat01)

Type <- c(mode(dat01$mpg),
          mode(dat01$cyl),
          mode(dat01$disp),
          mode(dat01$hp),
          mode(dat01$drat),
          mode(dat01$wt),
          mode(dat01$qsec),
          mode(dat01$vs),
          mode(dat01$am),
          mode(dat01$gear),
          mode(dat01$carb))

meta.df <- data.frame(Variables,
                      Type,
                      Labels)

print(meta.df, row.names = FALSE)

Помимо повышения эффективности моего сценария (в частности, я уверен, что существует более эффективный код, который я могу использовать для создания вектора «Тип»), мне также интересно услышать ваши предложения о том, как лучше обобщить этот скрипт, чтобы его можно было копировать / вставлять и применять к аналогично структурированным data.frames.

1 Ответ

0 голосов
/ 12 апреля 2019

Первым исправлением будет дедупликация этого определения Type:

Так как class(some_vector) возвращает одну строку, описывающую тип данных в этом векторе, а так как фрейм данных представляет собой список векторовВы можете использовать код, подобный следующему:

Type <- unlist(Map(class, mtcars))

[вам может понадобиться изменить порядок записей]

...