JAG*_*024 5 statistics pivot group-by r summary
我正在尝试从modifiedmkR 中的包运行一个函数。
install.packages('modifiedmk')
library(modifiedmk)
Run Code Online (Sandbox Code Playgroud)
我有一个数据框 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)
Run Code Online (Sandbox Code Playgroud)
我有四个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
Run Code Online (Sandbox Code Playgroud)
我对其中两个输出感兴趣:
第 1 列:
# Get percent of stations with significant trends where p < 0.05
mmky1lag(as.vector(data$Rainfall))[2] < 0.05
Run Code Online (Sandbox Code Playgroud)
和第 2 列:
# Make another column that is the mean Sen's slope
mmky1lag(as.vector(data$Rainfall))[7]
Run Code Online (Sandbox Code Playgroud)
但是,如何将这种方法应用于data我为每个人获得结果的地方Station?在python中,我会分组Station然后应用该方法。但我不确定如何在 R 中做到这一点。
然后按站分组后,我想要一个包含上述两列信息的汇总表。
这接近吗?该百分比为零,因为所有 p 值都大于 5%。您需要< 0.05在循环中添加 来获取数据框中的真/假值。
results <- data.frame(matrix(NA, 4, 3))
colnames(results) <- c('station', 'p-val', 'Sen-slope')
for(ii in seq_along(unique(Station))){
i <- unique(Station)[ii]
results[ii, 1] <- i
results[ii, 2] <- mmky1lag(as.vector(data$Rainfall[data$Station %in% i]))[2]
results[ii, 3] <- mmky1lag(as.vector(data$Rainfall[data$Station %in% i]))[7]
}
> results
station p-val Sen-slope
1 APT 0.2005025 17.32083
2 AF 0.2140574 29.73750
3 EL 0.4561249 -9.60000
4 GFS 0.1854354 -19.65333
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |