有没有更有效的方法来创建一个data.frame,其中包含R中每个变量的描述?

时间:2019-04-12 16:10:15

标签: r dataframe vector metadata mode

我在R中有一个data.frame(让我们以内置数据集“ 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)

除了提高脚本的效率(特别是,我相信可以使用更有效的代码来创建矢量“ Type”)之外,我还想听听您对如何最佳概括的建议此脚本,以便可以将其复制/粘贴并应用于结构类似的data.frames。

1 个答案:

答案 0 :(得分:0)

第一个解决方法是删除该Type定义的重复数据:

由于class(some_vector)返回一个描述该向量中数据类型的字符串,并且由于数据帧是向量列表,因此您可以使用如下代码:

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

[您可能需要重新排序条目]