【问题标题】:How can I access multiple variables with similar names in R?如何在 R 中访问多个具有相似名称的变量?
【发布时间】:2020-06-12 08:44:07
【问题描述】:

我目前正在使用一个名为 df 的数据框,其中包含大约 100 个变量。其中有一组命名非常相似的因子变量:A_1、A_2、A_3、A_4 ... 等。 我想对这个变量子集进行一些计算——首先,我想为所有变量添加相同的新因子水平。

levels(df$A_1) <- c(levels(df$A_1), "x")
levels(df$A_2) <- c(levels(df$A_2), "x")
levels(df$A_3) <- c(levels(df$A_3), "x")
levels(df$A_4) <- c(levels(df$A_4), "x")
levels(df$A_5) <- c(levels(df$A_5), "x")
levels(df$A_6) <- c(levels(df$A_6), "x")
...

这段代码运行良好。但是,我想知道是否没有一种方法可以同时访问所有这些变量,因为它们都共享相同的前缀。

【问题讨论】:

标签: r variables


【解决方案1】:

您可以在选定的列上使用lapply 并更新它们的levels

cols <- grep('A_\\d+', names(df))
df[cols] <- lapply(df[cols], function(x) {levels(x) <- c(levels(x), 'x');x})

str(df)
#'data.frame':  2 obs. of  3 variables:
# $ A  : int  1 2
# $ A_1: Factor w/ 3 levels "a","b","x": 1 2
# $ A_2: Factor w/ 3 levels "d","e","x": 1 2

dplyr我们可以使用:

library(dplyr)

df %>%
  mutate(across(starts_with('A_'), ~{levels(.) <- c(levels(.), 'x');.}))
  #In older dplyr use `mutate_at`
  #mutate_at(vars(starts_with('A_')), ~{levels(.) <- c(levels(.), 'x');.})

数据

df <- data.frame(A = 1:2, A_1 = c('a', 'b'), A_2 = c('d', 'e'), 
                 stringsAsFactors = TRUE)
str(df)
#'data.frame':  2 obs. of  3 variables:
# $ A  : int  1 2
# $ A_1: Factor w/ 2 levels "a","b": 1 2
# $ A_2: Factor w/ 2 levels "d","e": 1 2

【讨论】:

    【解决方案2】:

    我们可以从forcats使用fct_expand

    library(forcats)
    library(dplyr)
    df1 <-  df %>% 
              mutate(across(starts_with('A_'), fct_expand, 'x'))
    
    str(df1)
    #'data.frame':  2 obs. of  3 variables:
    # $ A  : int  1 2
    # $ A_1: Factor w/ 3 levels "a","b","x": 1 2
    # $ A_2: Factor w/ 3 levels "d","e","x": 1 2
    

    数据

    df <- data.frame(A = 1:2, A_1 = c('a', 'b'), A_2 = c('d', 'e'), 
                     stringsAsFactors = TRUE)
    

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 1970-01-01
      • 2020-06-16
      • 2020-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多