【问题标题】:R: Vars - Column list for use in loop/function/applyR: Vars - 用于循环/函数/应用的列列表
【发布时间】:2020-09-13 18:06:54
【问题描述】:

我正在尝试执行以下代码:

vars <- c("var1", "var2", "var3") #These corresponds to the names of the columns in my DF

Test <- lapply(DF[, vars], function(x) lm(x~var_x)) 

我希望能够使用分配的值“vars”,其中包括所有我想要的列(变量),这样我就不必在我的代码中一次提及每一列。但是下面的代码给了我这个错误:

 Error in `[.data.frame`(DF, , c(vars)) : undefined columns selected

我应该如何应用“vars”才能使其按需要工作?

【问题讨论】:

    标签: r function dataframe lapply


    【解决方案1】:

    这里,lapply 的输出是该列的值。可能我们需要传递列名并创建公式

    lapply(vars,  function(x) lm(as.formula(paste0(x "~ var_x")), data = DF))
    

    或者另一个选项是reformulate 来创建formula

    lapply(vars, function(x) lm(reformulate("var_x", response = x), data = DF))
    

    为了在单个表中获得输出,我们可以使用tidyglance from broom

    library(purrr)
    library(dplyr)
    library(broom)
    map_dfr(setNames(vars, vars) ~ 
                lm(reformulate("var_x", response = .x), data = DF) %>%
                tidy, .id = 'grp')
                
    

    【讨论】:

    • 感谢这似乎有效(最后一行代码)。您知道如何为这两种情况操作该代码吗? 1) var_x = 虚拟变量,我想在 var_x = 1 和 var_x = 0 时应用代码。 2) 如何获取所有变量的特定统计信息,以便在表格中显示一些统计信息(例如系数)。现在它只作为一个列表给出,它也不会让我转换为数据框。
    • @Andycode 如果您想在表格中输出,请使用broom,即library(broom);do.call(rbind, lapply(vars, function(x) tidy(lm(reformulate("var_x", response = x), data = DF))))
    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 2015-10-12
    • 2023-01-24
    • 2014-03-17
    • 2022-01-11
    相关资源
    最近更新 更多