作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 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 中生成一个包含两列的汇总表:
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
我对其中两个输出感兴趣:
# 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_by
按
Station
分组,然后使用
group_map
将
mmky1lag
函数应用于分组元素。需要
setNames
将
Station
值添加回结果,然后
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/
我正在尝试从 modifiedmk 运行一个函数R中的包。 install.packages('modifiedmk') library(modifiedmk) 我有一个数据框 data我制作了以下内
我是一名优秀的程序员,十分优秀!