r - 将 ifelse() 创建的变量添加到数据框列表

标签 r list iteration

我想知道如何使用 ifelse() 命令对数据框列表创建变量。

我使用 ggplot2::diamonds 数据集中的 300 个顶部和底部值创建了 2 个数据集,分别称为 diamonds_top300diamonds_bottom300:

# Loads packages
# ---- NOTE: making plots and diamonds dataset
if(!require(ggplot2)){install.packages("ggplot2")}
# ---- NOTE: for data wrangling
if(!require(dplyr)){install.packages("dplyr")}

# dataset creation
# ---- NOTE: selects only the top 300 rows of the dataset
diamonds_top300 <- data.frame(dplyr::top_n(diamonds, 300, table))
# ---- NOTE: selects only the bottom 300 rows of the dataset
diamonds_bottom300 <- data.frame(dplyr::top_n(diamonds, -300, table))

然后,我使用 lapply 和函数创建一个包含 2 个模型的列表,仅在使用的数据集上有所不同:

# Loads packages
# ---- NOTE: run mixed effects models
if(!require(lme4)){install.packages("lme4")}

## lists datasets to use
DATASET_list <- c("diamonds_top300", "diamonds_bottom300")

## creates model
# ---- NOTE: creates list object
freq_mlm_poisson_model <- 
  lapply(DATASET_list,
         function(data_list) wrapr::let(
           c(data_list_model = data_list), 
           (lme4::glmer(
             price ~ cut + color + carat + (1 | clarity) + (1 | depth),
             data = data_list_model,
             family = poisson()
           )
           )
         )
  )
# ---- NOTE: changes list object name
freq_mlm_poisson_model <- 
  setNames(freq_mlm_poisson_model, paste("freq_mlm_poisson_model", 
                                         DATASET_list,
                                              sep = "__")
  )

然后我使用 lapply 和函数以列表形式创建这些模型的摘要:

### creates summary model for list object freq_mlm_poisson_model
# ---- NOTE: creates list object
freq_mlm_poisson_summary <- 
  lapply(
    freq_mlm_poisson_model, 
    function(model_list) {
      summary(model_list)
    }
  )
# ---- NOTE: changes list object name
freq_mlm_poisson_summary <- 
  setNames(freq_mlm_poisson_summary, paste("freq_mlm_poisson_summary", 
                                           DATASET_list,
                                         sep = "__")
  )

然后,我将摘要转换为仅包含固定效果信息的数据框:

### turns summary list fixed effects into list of data frames
# ---- NOTE: creates object with summary of fixed effects
freq_mlm_poisson_summary_fixedeffects <- 
  lapply(freq_mlm_poisson_summary, `[[`, 10)
# ---- NOTE: creates list object
freq_mlm_poisson_summary_fixedeffects_df <- 
  lapply(
    freq_mlm_poisson_summary_fixedeffects, 
    function(model_list) {
      data.frame(model_list)
    }
  )
# ---- NOTE: changes list object name
freq_mlm_poisson_summary_fixedeffects_df <- 
  setNames(freq_mlm_poisson_summary_fixedeffects_df, paste("freq_mlm_poisson_summary_fixedeffects_df", 
                                           DATASET_list,
                                           sep = "__")
  )

有没有办法使用 ifelse() 命令或其他命令在每个列表中创建名为 p_value_sign 的变量,该变量告诉是/否变量 Pr(>|z 中是否存在相应的 p 值|) 小于 0.05(即 p < 0.05)?

最佳答案

由于它是data.framelist,我们可以在循环list后直接使用transform创建列lapply。最好将其保留为逻辑向量,因为它有助于更​​轻松地进行子集

freq_mlm_poisson_summary_fixedeffects_df2 <- lapply(
       freq_mlm_poisson_summary_fixedeffects_df,
       transform, p_value_sign = `Pr...z..` < 0.05)

如果我们需要多重比较,请使用case_when

library(dplyr)
library(purrr)
library(stringr)
freq_mlm_poisson_summary_fixedeffects_df2 <- map(
   freq_mlm_poisson_summary_fixedeffects_df, ~ .x %>%
        mutate(p_value_sign = case_when(`Pr...z..` < 0.05 ~ 
          "significant at p < 0.05",
           ( `Pr...z..` < 0.10) & (`Pr...z..` >= 0.05) ~ 
           "marginally significant at p < 0.10", TRUE ~ "Not significant")))

关于r - 将 ifelse() 创建的变量添加到数据框列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66714445/

相关文章:

regex - R 如何处理正则表达式中的特殊字符?

r - outline=FALSE 使用什么方法来确定异常值?

python - 检查列表并相应地编辑第二个列表

python - 为什么我的计算机中的 Python 列表不能容纳超过 693 个数字?

java 8根据属性比较2个列表

ruby - 对数组中的每个单词调用一个方法

javascript - Google Earth Engine 如何返回每次迭代的图像

r - 无法更改数据框列名称

r - 与 R 中的日期模糊连接

java - 霍夫施塔特的 Q 序列