【发布时间】:2020-03-16 11:19:31
【问题描述】:
我正在研究干旱对植物的影响,为此我需要比较干旱之前、期间和之后的数据。然而,事实证明很难从我的数据中选择这些时期,因为天的长度会有所不同。由于我有几年的每日分辨率时间序列,我想避免手动选择时间段。我已经为此苦苦挣扎了很长一段时间,如果有任何提示和建议,我将非常感激。
这是我的数据的简化示例:
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 组?我在这里找到了一个有前途的解决方案Selecting a specific range of days prior to event in R,其中使用了map(. , function(x) dat[(x-5):(x), ]),但问题是我没有要比较的固定天数,因为天数取决于正常和干旱期的长度.
我想创建一个嵌套的 tibble 来比较不同的组,比如这里 Compare groups with each other 和
tibble(value = myData,
group= myData$group %>%
nest(value))
但这会产生一个错误,我认为这是因为我试图组合一个向量而不是一个小标题。
【问题讨论】:
-
你想如何比较周期的平均值?例如如果第 1 期的平均值是 0.5,第 2 期是 0.4,第 3 期是 0.44,你将如何进行比较?
-
@user2474226 我想分别比较所有组,例如周期 1 的平均值是否大于周期 2?它是否大于第 3 期?周期 2 是否大于周期 3?我的问题是:干旱期间 Amp 的平均值是否较小,干旱后的 Amp 是否与干旱前的 Amp 一样大。我希望这能澄清我正在尝试做的事情。
-
哇。这里有一些有趣的东西。你为什么用
{. ->> myData}而不是-> myData? -
另外,你为什么要把一个小标题作为一个列放在另一个小标题中?做
myData %>% group_by(group) %>% nest(value)不是更容易吗? -
仅供参考:您的示例数据没有任何关于组、日期或时间的信息,因此我们很难复制。