【问题标题】:loop through a vector of variable names while dropping factor levels循环遍历变量名向量,同时降低因子水平
【发布时间】:2014-06-07 12:53:56
【问题描述】:

我在.GlobalEnv 中有一个包含结构相同变量名称的字符向量。我想从每个变量的相同因素中降低水平。

我该怎么做,例如扩展下面的代码,实际上更新全局环境中的变量?查看示例数据,这意味着在将subset 和assign 之后的W 和Q 不存在的因子z 降低到.GlobalEnv。

lapply(mget(var_list, .GlobalEnv), function(x) levels(x$z) <- droplevels(x$z))

我想我可以做一些类似于下面的例子来改变例如rownames 使用 lapply

list_of_dfs <- lapply(list_of_dfs, "rownames<-", NULL)

虚拟数据

z <- c("a",'a','b','a','c','d','b','d','d','b')
x <- c(10,2,33,41,5,64,17,11,22,1)
y <- c('W','W','W','W','W','Q','Q','Q','Q','Q')
df <- data.frame(cbind(z,x,y))

var_list <- c('W', 'Q')

# subsetting and assigning variables
for(i in var_list){
   assign(i, subset(df, y %in% i), envir=.GlobalEnv)
}

【问题讨论】:

    标签: r loops global-variables apply r-factor


    【解决方案1】:

    你在这行做了什么

    lapply(mget(var_list, .GlobalEnv), function(x) levels(x$z) <- droplevels(x$z))
    

    是你修改了局部变量x,而不是.GlobalEnv中的变量Q和W。

    你可以试试这样的:

    lapply(var_list, function(x) assign(x, droplevels(get(x, envir=.GlobalEnv)), .GlobalEnv))
    

    这会从所有列中删除未使用的级别,而不仅仅是z。

    要仅从z 降级,您可以尝试:

    lapply(var_list, function(x) 
           eval(parse(text=paste0(x, "['z'] <<- droplevels(", x,"['z'])"))))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      相关资源
      最近更新 更多