【问题标题】:Loop for Shapiro-Wilk normality test for multiple variables in R循环用于 R 中多个变量的 Shapiro-Wilk 正态性检验
【发布时间】:2019-10-06 03:13:01
【问题描述】:

我有一个名为“My_data”的数据集,以及三个名为 a、b、c 的变量。 我的数据头是这样的:

> head(My_data)
  variable_A variable_B     value
1  Jul       W1 18.780294
2  Jul       W2 13.932397
3  Aug       W2 20.877093
4  Sep       W3  9.291295
5  May       W1 10.939570
6  Oct       W1 12.23671

我想用两个变量对每个子集进行夏皮罗正态性检验。

> Subset1=subset(My_data, variable_A== "Jan" & variable == "W1")
> Subset2=subset(My_data, variable_A== "Feb" & variable == "W1")
> Subset3=subset(My_data, variable_A== "Mar" & variable == "W1")
.
.
> Subset_n=subset(My_data, variable_A== "Jan" & variable == "W2")
> 

Subset_n2=subset(My_data, variable_A== "Jan" & variable == "W3")

你知道我需要制作很多子集并为每个子集做夏皮罗。

但如果我可以循环播放它,我的工作就会变得更轻松。

我有这个代码用于 lopping

> loop_Shapiro = list()
> for (ids in unique(My_data$variable_A)){
+   My_sub = subset(x=My_data, subset=variable_A==ids)
+   
+   loop_Shapiro[[ids]] = shapiro.test(My_sub$value)
+ }

这个循环有效,但问题是它只基于一个变量的转租,但我想要两个。

【问题讨论】:

    标签: r for-loop


    【解决方案1】:

    首先,让我们创建一个示例数据框。

    # Create example data frame
    set.seed(18800)
    
    My_data <- data.frame(
      variable_A = rep(month.abb, each = 30),
      variable_B = rep(paste0("W", 1:3), times = 120),
      value = rnorm(360)
    )
    

    我们可以不使用subset,使用split分割数据框。结果是一个列表。

    # Split the data frame
    My_list <- split(My_data, f = list(My_data$variable_A, My_data$variable_B))
    

    之后,我们可以使用for-loop,如下所示。

    loop_Shapiro <- list()
    
    for (name in names(My_list)){
      My_sub <- My_list[[name]]
      loop_Shapiro[[name]] <- shapiro.test(My_sub$value)
    }
    
    # Check the results of the first shapiro test
    loop_Shapiro[1]
    # $Apr.W1
    # 
    # Shapiro-Wilk normality test
    # 
    # data:  My_sub$value
    # W = 0.89219, p-value = 0.1794
    

    我们也可以考虑在拆分后使用lapply函数。结果是一个列表。

    # Use lapply
    loop_Shapiro2 <- lapply(My_list, function(x) shapiro.test(x$value))
    
    loop_Shapiro2[1]
    # $Apr.W1
    # 
    # Shapiro-Wilk normality test
    # 
    # data:  x$value
    # W = 0.89219, p-value = 0.1794
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多