【问题标题】:Grouping by two columns and then calculating the median按两列分组,然后计算中位数
【发布时间】:2020-10-16 02:50:45
【问题描述】:

我有一个数据集,我想在其中计算每个地块的每个原产地(本地和外来)的第一花日期中值。

我的最终目标是测试在温暖和环境中的本地和外来物种之间第一朵花的中位日期是否存在显着差异。

这是我的数据的一个子集:

dput(umbs_firstflower[8:16,])
structure(list(site = c("umbs", "umbs", "umbs", "umbs", "umbs", 
"umbs", "umbs", "umbs", "umbs"), plot = c("A1", "A1", "A1", "A2", 
"A2", "A2", "A2", "A3", "A3"), species = c("Sogi", "Sone", "Syla", 
"Cest", "Poco", "Popr", "Ruac", "Cest", "Dasp"), origin = c("Native", 
"Native", "Native", "Exotic", "Exotic", "Exotic", "Exotic", "Exotic", 
"Native"), state = c("ambient", "ambient", "ambient", "warmed", 
"warmed", "warmed", "warmed", "ambient", "ambient"), first.flower = c("248", 
"240", "227", "195", "169", "155", "156", "194", "185")), row.names = c(NA, 
-9L), class = c("tbl_df", "tbl", "data.frame"))

这是我编写的代码示例:

umbs <- umbs_firstflower %>% group_by(plot, origin) %>% summarize(mean.firstflw = mean(as.numeric(date))) %>% ungroup()

【问题讨论】:

  • 您要计算mean 还是median ?您的数据中没有 date 列。你需要mean(as.numeric(first.flower))吗?
  • 是的,我应该这么说。 first.flower 列中的数字是儒略日期。我想计算中位数。
  • 您提供的数据在state 中具有“环境”但没有“温暖”值。如何识别“温暖和环境图”?
  • 我现在编辑了示例代码以包含环境和加热状态。
  • 谢谢。新数据中没有温暖/异国情调的组合,这是故意的吗?另外,您打算使用什么显着性检验来比较中位数?

标签: r dplyr


【解决方案1】:

您可以在这里使用许多显着性测试,所以我将使用一个 (kruskal.test()) 来演示解决方案。但请注意,there is disagreement 是测试 3 个以上组中位数之间显着差异的最佳方法,因此您可能需要将此测试换成另一个。

步骤:

  1. 创建一个grp 变量,以匹配跨类别列的各种兴趣组合。
  2. pivot_wider() 将组作为 first.flower 值的列。
library(tidyverse)
library(magrittr)

df_wide <- 
  df %>%
  mutate(first.flower = as.numeric(first.flower),
         grp = case_when(
           origin == "Native" & state == "ambient" ~ "nat_ambi",
           origin == "Native" & state == "warmed" ~ "nat_warm",
           origin == "Exotic" & state == "ambient" ~ "exo_ambi",
           origin == "Exotic" & state == "warmed" ~ "nat_warm",
           TRUE ~ NA_character_
         )) %>%
  pivot_wider(id_cols = 1:5, names_from = grp, values_from = "first.flower")

df_wide
# A tibble: 9 x 8
  site  plot  species origin state   nat_ambi nat_warm exo_ambi
  <chr> <chr> <chr>   <chr>  <chr>      <dbl>    <dbl>    <dbl>
1 umbs  A1    Sogi    Native ambient      248       NA       NA
2 umbs  A1    Sone    Native ambient      240       NA       NA
3 umbs  A1    Syla    Native ambient      227       NA       NA
4 umbs  A2    Cest    Exotic warmed        NA      195       NA
5 umbs  A2    Poco    Exotic warmed        NA      169       NA
6 umbs  A2    Popr    Exotic warmed        NA      155       NA
7 umbs  A2    Ruac    Exotic warmed        NA      156       NA
8 umbs  A3    Cest    Exotic ambient       NA       NA      194
9 umbs  A3    Dasp    Native ambient      185       NA       NA
  1. 使用%$% magrittr 管道直接运行显着性检验。
 df_wide %$% kruskal.test(list(nat_ambi, nat_warm, exo_ambi))

    Kruskal-Wallis rank sum test

data:  list(nat_ambi, nat_warm, exo_ambi)
Kruskal-Wallis chi-squared = 4.2667, df = 2, p-value = 0.1184

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 2016-02-20
    • 2017-04-07
    • 2018-07-22
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多