gpt4 book ai didi

r - 使用来自包 `modifiedmk` 的统计信息在 R 中创建汇总表

转载 作者:行者123 更新时间:2023-12-03 16:20:02 25 4
gpt4 key购买 nike

我正在尝试从 modifiedmk 运行一个函数R中的包。

install.packages('modifiedmk')
library(modifiedmk)
我有一个数据框 data我制作了以下内容:
Station <- c('APT','APT', 'APT','APT', 'APT', 'APT', 'APT','APT', 'APT','APT','APT','APT',
'AF','AF', 'AF','AF','AF','AF','AF','AF','AF',
'EL', 'EL', 'EL', 'EL', 'EL', 'EL', 'EL', 'EL', 'EL', 'EL', 'EL', 'EL', 'EL', 'EL', 'EL',
'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS', 'GFS'
)
Rainfall <- c(375.3, 263.3, 399.2, 242.6, 847.6, 276.5, 712.8, 366.3, 188.6, 478.4, 539, 682.5,
520.7, 1337.8, 524, 908.4,748.5,411.8, 772.4,978.5,983,
732.4, 788.6, 567.1, 576, 931.6, 727.2, 1079.3, 902.8,493.4, 630.7, 784.1,660.2, 531.3, 487.1,798.4,
1064.1, 590.3, 1011.2, 1037.1, 1398.4, 1153.6,994.1, 1100.2,743.7,637.4, 792.2, 891.9,880.9, 670, 920.2,681.4)
Year <- c('1957','1958','1959','1960','1961','1962','1963','1964','1965','1966','1967','1968',
'1960','1961','1962','1963','1964','1965','1966','1967','1968',
'1957','1958','1959','1960','1961','1962','1963','1964','1965','1966','1967','1968','1969','1970','1971',
'1964','1965','1966','1967','1968','1969','1970','1971','1972','1973','1974','1975','1976','1977','1978','1979')
length(Year)
data<-data.frame(Year, Station, Rainfall)
我有四个 Stations降雨数据作为数据框中的行。我要申请 mmky1lag方法来自 modifiedmk每个包裹 Station数据并在 R 中生成一个包含两列的汇总表:
  • 具有显着趋势的站点百分比,其中 p < 0.05
  • 平均森斜率

  • 例如,我可以运行 mmky1lag使用 mmky1lag(as.vector(data$Rainfall)) 处理所有降雨数据的方法产生
    > mmky1lag(as.vector(data$Rainfall))
    Corrected Zc new P-value N/N* Original Z old P.value
    3.332353e+00 8.611480e-04 1.297360e+00 3.795608e+00 1.472822e-04
    Tau Sen's slope old.variance new.variance
    3.634992e-01 9.092857e+00 1.605933e+04 2.083474e+04
    我对其中两个输出感兴趣:
    第 1 列:
    # Get percent of stations with significant trends where p < 0.05
    mmky1lag(as.vector(data$Rainfall))[2] < 0.05
    和第 2 列:
    # Make another column that is the mean Sen's slope
    mmky1lag(as.vector(data$Rainfall))[7]
    但是,我如何在 data 上应用此方法我得到每个人的结果 Station ?在python中,我会分组 Station然后应用该方法。但我不确定如何在 R 中做到这一点。
    然后按站分组后,我想要一个包含上述两列信息的汇总表。

    最佳答案

    如果您想按组(在本例中为 mmky1lag )将 station 函数应用于数据帧,则需要考虑多种方法。
    首先,您可以使用 aggregate :

    library(modifiedmk)

    mktests <- aggregate(Rainfall ~ Station, data = data, FUN = mmky1lag)
    这将采用 Rainfall 组使用 Station 的度量的公式。您的所有结果都将在矩阵中返回,MK 测试参数位于单列中。
    另一种方法可能是使用 data.table 包。
    library(data.table)

    mktests <- as.data.table(data)[, as.list(mmky1lag(Rainfall)), by = Station]
    这将从 mmky1lag 中获取结果并放入列表中,然后转换为数据表。选项 by 将允许您通过 Station 执行此操作。
    第三种方法可能是使用 dplyr 包。
    library(dplyr)

    mktests <- data %>%
    group_by(Station) %>%
    group_map(~mmky1lag(.x$Rainfall)) %>%
    setNames(unique(sort(data$Station))) %>%
    bind_rows(.id = "Station")
    这使用 group_byStation 分组,然后使用 group_mapmmky1lag 函数应用于分组元素。需要 setNamesStation 值添加回结果,然后 bind_rows 将结果列表转换为数据帧。
    结果(使用 data.table 解决方案)应该如下所示(其他方法应该类似):
    R> mktests
    Station Corrected Zc new P-value N/N* Original Z old P.value Tau Sen's slope old.variance new.variance
    1: APT 1.2801214 0.2005025 0.4849366 0.8914431 0.3726915 0.2121212 17.32083 212.6667 103.12986
    2: AF 1.2424858 0.2140574 0.5703144 0.9383149 0.3480826 0.2777778 29.73750 92.0000 52.46892
    3: EL -0.7452428 0.4561249 1.1288325 -0.7917947 0.4284804 -0.1619048 -9.60000 408.3333 460.93994
    4: GFS -1.3242038 0.1854354 1.4160741 -1.5757881 0.1150746 -0.3000000 -19.65333 493.3333 698.59657
    如果你想要 p < .05 的 Station s 的百分比,你可以这样做:
    sum(mktests$`new P-value` < .05) / nrow(mktests)
    在这种情况下,它为零,因为基于 new P-value ,它们都不重要。
    可以计算 Sen's slope 的平均值:
    mean(mktests$`Sen's slope`)
    4.45125
    我不确定您是否预期示例数据会产生不同的结果(正如您建议将结果放入 2 列)。请让我知道这是否是您的想法。

    关于r - 使用来自包 `modifiedmk` 的统计信息在 R 中创建汇总表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64687608/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com