比较 tibble 中不同长度的组

Comparing groups with different lengths in a tibble

我正在研究干旱对植物的影响,为此我需要比较干旱之前、期间和之后的数据。但是,事实证明很难 select 从我的数据中提取这些时间段,因为天数各不相同。由于我有几年的时间序列和每日分辨率,我想避免手动 selecting 期间。我已经为此苦苦挣扎了很长一段时间,非常感谢您提供任何提示和建议。

这是我的数据的一个简化示例:

myData <- tibble(
  day = c(1:16),
  TWD = c(0,0,0,0.444,0.234,0.653,0,0,0.789,0.734,0.543,0.843,0,0,0,0),
  Amp = c(0.6644333,0.4990167,0.3846500,0.5285000,0.4525833,0.4143667,0.3193333,0.5690167,0.2614667,0.2646333,0.7775167,3.5411667,0.4515333,2.3781333,2.4140667,2.6979333)
)

在我的数据中,TWD > 0 意味着有干旱,所以我确定了这些时期。

myData %>%
  mutate(status = case_when(TWD > 0 ~ "drought", 
                           TWD == 0 ~ "normal")) %>%
{. ->> myData} 

我使用以下代码来获取各个正常期和干旱期的长度

myData$group <- with(myData, rep(seq_along(z<-rle(myData$status)$lengths),z))
with(myData, table(group, status))     

     status
group drought normal
    1       0      3
    2       3      0
    3       0      2
    4       4      0
    5       0      4

这是我卡住的地方。理想情况下,我希望获得每个干旱期的 Amp 平均值,并将它们与干旱前后正常时期的平均值进行比较,然后转到下一个干旱期。我如何比较例如第 1、2 和 3 组?我在这里 找到了一个有前途的解决方案,其中使用了 map(. , function(x) dat[(x-5):(x), ]),但问题是我没有固定的天数要比较,因为天数取决于正常期和干旱期。

我想创建一个嵌套的 tibble 来比较不同的组,比如这里

tibble(value = myData,
    group= myData$group %>%
    nest(value))

但这会产生一个错误,我认为这是因为我正在尝试组合矢量而不是小标题。

一种可能性是使用成对的 Wilcoxon 检验来比较每组的均值(尽管老实说,我不是 Wilcoxon 是否适用于此数据的专家):

pairwise.wilcox.test(myData$Amp, myData$group, p.adjust.method = 'none', alternative = 'greater')

列索引和行索引是组,在本例中,您知道偶数组是 'drought' 个周期。

您可能需要更正多重比较(通过调查 p.adjust.method 参数)。