比较 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
参数)。
我正在研究干旱对植物的影响,为此我需要比较干旱之前、期间和之后的数据。但是,事实证明很难 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
参数)。