【问题标题】:Is it possible to select columns based on variable labels?是否可以根据变量标签选择列?
【发布时间】:2021-05-23 21:35:33
【问题描述】:

数据集非常广泛,是否可以使用可变标签来选择列?

library(expss)
data(mtcars)
mtcars = apply_labels(mtcars,
                      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",
                      vs = c("V-engine" = 0,
                             "Straight engine" = 1),
                      am = "Transmission",
                      am = c("Automatic" = 0,
                             "Manual"=1),
                      gear = "Number of forward gears",
                      carb = "Number of carburetors"
)
mtcars %>% 
  select(contains("Miles"))

这不起作用,因为它在列名中查找。它可以改为查看标签吗?

编辑:我应该补充一下,除了将标签转换为列名这一点很明显。

【问题讨论】:

    标签: r dplyr tidyr


    【解决方案1】:

    我们可以得到attributes'label',检查'Miles'

    library(dplyr)
    library(stringr)
    mtcars %>% 
       select(where(~ str_detect(attributes(.)$label, 'Miles')))
    

    -输出

    #                      mpg
    #Mazda RX4           21.0
    #Mazda RX4 Wag       21.0
    #Datsun 710          22.8
    #Hornet 4 Drive      21.4
    #Hornet Sportabout   18.7
    #Valiant             18.1
    #Duster 360          14.3
    #Merc 240D           24.4
    #Merc 230            22.8
    #Merc 280            19.2
    #Merc 280C           17.8
    #Merc 450SE          16.4
    # ..
    

    或者使用base R(和R 4.1.0),循环使用lapply的列,提取labels属性,使用grep返回匹配pattern'Miles'的元素,得到names 并在 selectsubset 中使用它

    mtcars |>  
        lapply(\(x) attributes(x)$label) |> 
        grep(pattern = 'Miles', value = TRUE) |> 
        names() |>
        {\(x) subset(mtcars, select = x)}()
    

    -输出

    #                      mpg
    #Mazda RX4           21.0
    #Mazda RX4 Wag       21.0
    #Datsun 710          22.8
    #Hornet 4 Drive      21.4
    #Hornet Sportabout   18.7
    #Valiant             18.1
    #Duster 360          14.3
    #Merc 240D           24.4
    #Merc 230            22.8
    #Merc 280            19.2
    # ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 2022-06-21
      • 2015-12-18
      • 1970-01-01
      • 2011-06-27
      • 2020-12-10
      相关资源
      最近更新 更多