求R中具有相同扩展名的不同数据行的最大值

求R中具有相同扩展名的不同数据行的最大值,r,R,这是我的数据 ht<-structure(list(`1-2006` = structure(c(1.6, 1.6, 1.6, 1.6, 0.208, 0.405, 0.527, 0.818, 2.2, 3, 2.2, 3, 3, 3, 3, 3.2, 4.6, 5.2), .Names = c("nmaxm5", "nmaxm10", "nmaxm15", "nmaxm30", "dmaxm5", "dmaxm10", "dmaxm15", "dmaxm30", "maxhourl

这是我的数据

ht<-structure(list(`1-2006` = structure(c(1.6, 1.6, 1.6, 1.6, 0.208, 
0.405, 0.527, 0.818, 2.2, 3, 2.2, 3, 3, 3, 3, 3.2, 4.6, 5.2), .Names = c("nmaxm5", 
"nmaxm10", "nmaxm15", "nmaxm30", "dmaxm5", "dmaxm10", "dmaxm15", 
"dmaxm30", "maxhourly", "maxh2", "maxh3", "maxh4", "maxh5", "maxh6", 
"maxh8", "maxh12", "maxh18", "maxdaily")), `1-2007` = structure(c(0.8, 
1.4, 2, 3, 2.345, 4.085, 4.884, 4.884, 3.8, 5.2, 5.2, 5.6, 5.6, 
5.6, 5.6, 5.6, 5.6, 5.6), .Names = c("nmaxm5", "nmaxm10", "nmaxm15", 
"nmaxm30", "dmaxm5", "dmaxm10", "dmaxm15", "dmaxm30", "maxhourly", 
"maxh2", "maxh3", "maxh4", "maxh5", "maxh6", "maxh8", "maxh12", 
"maxh18", "maxdaily")), `2-2006` = structure(c(0.8, 1, 1, 1.2, 
0.232, 0.464, 0.691, 1.32, 2.2, 3.2, 4.4, 4.2, 5.8, 5, 6.8, 7.6, 
9, 8.8), .Names = c("nmaxm5", "nmaxm10", "nmaxm15", "nmaxm30", 
"dmaxm5", "dmaxm10", "dmaxm15", "dmaxm30", "maxhourly", "maxh2", 
"maxh3", "maxh4", "maxh5", "maxh6", "maxh8", "maxh12", "maxh18", 
"maxdaily")), `2-2007` = structure(c(0.4, 0.6, 0.8, 1.2, 0.643, 
1.218, 1.577, 3.128, 1.8, 2.4, 2.4, 3.8, 3.8, 3, 3.8, 3.8, 3.8, 
4), .Names = c("nmaxm5", "nmaxm10", "nmaxm15", "nmaxm30", "dmaxm5", 
"dmaxm10", "dmaxm15", "dmaxm30", "maxhourly", "maxh2", "maxh3", 
"maxh4", "maxh5", "maxh6", "maxh8", "maxh12", "maxh18", "maxdaily"
)), `3-2006` = structure(c(1.6, 3.2, 2.6, 4.4, 0.575, 0.947, 
1.306, 2.184, 4.4, 5.4, 8.6, 7.2, 7.4, 8.8, 8, 8.8, 11.2, 13.8
), .Names = c("nmaxm5", "nmaxm10", "nmaxm15", "nmaxm30", "dmaxm5", 
"dmaxm10", "dmaxm15", "dmaxm30", "maxhourly", "maxh2", "maxh3", 
"maxh4", "maxh5", "maxh6", "maxh8", "maxh12", "maxh18", "maxdaily"
)), `3-2007` = structure(c(0.6, 0.8, 1.2, 2, 0.62, 1.239, 1.859, 
3.34, 3.8, 5.6, 8.2, 9.2, 10.2, 9.8, 9.8, 9.8, 11.2, 13.6), .Names = c("nmaxm5", 
"nmaxm10", "nmaxm15", "nmaxm30", "dmaxm5", "dmaxm10", "dmaxm15", 
"dmaxm30", "maxhourly", "maxh2", "maxh3", "maxh4", "maxh5", "maxh6", 
"maxh8", "maxh12", "maxh18", "maxdaily"))), .Names = c("1-2006", 
"1-2007", "2-2006", "2-2007", "3-2006", "3-2007"))
问题的补充

如果每个数据(1-2006,1-2007…)是一个如下列表,该怎么办

data<-structure(list(`1-2006` = structure(list(max = structure(c(1.6, 
1.6, 1.6, 1.6, 0.208, 0.405, 0.527, 0.818, 2.2, 3, 2.2, 3, 3, 
3, 3, 3.2, 4.6, 5.2), .Names = c("nmaxm5", "nmaxm10", "nmaxm15", 
"nmaxm30", "dmaxm5", "dmaxm10", "dmaxm15", "dmaxm30", "maxhourly", 
"maxh2", "maxh3", "maxh4", "maxh5", "maxh6", "maxh8", "maxh12", 
"maxh18", "maxdaily")), pars = structure(c(4.31546117106427, 
0.820365947190018, 0.0801520102681417, 1.23559346429995, 0.165928116911697, 
4.9018542025384), .Names = c("a", "l", "v", "k", "f", "mx")), 
    stats = structure(list(mean1 = 0.0351706036745407, mean6 = 0.209375, 
        mean12 = 0.41875, mean24 = 0.8375, var1 = 0.0274966155546346, 
        var6 = 0.301498015873016, var12 = 0.749314516129032, 
        var24 = 2.0385, pdr1 = 0.921259842519685, pdr6 = 0.71875, 
        pdr12 = 0.625, pdr24 = 0.375, cov1lag1 = 0.00862854839737093, 
        cov6lag1 = 0.112977142333984, cov12lag1 = 0.296668701171875, 
        cov24lag1 = 0.234755859375), .Names = c("mean1", "mean6", 
    "mean12", "mean24", "var1", "var6", "var12", "var24", "pdr1", 
    "pdr6", "pdr12", "pdr24", "cov1lag1", "cov6lag1", "cov12lag1", 
    "cov24lag1")), dismax = c(0.208, 0.405, 0.527, 0.818), normax = c(1.6, 
    1.6, 1.6, 1.6), corr = NA_real_), .Names = c("max", "pars", 
"stats", "dismax", "normax", "corr")), `1-2007` = structure(list(
    max = structure(c(0.8, 1.4, 2, 3, 2.345, 4.085, 4.884, 4.884, 
    3.8, 5.2, 5.2, 5.6, 5.6, 5.6, 5.6, 5.6, 5.6, 5.6), .Names = c("nmaxm5", 
    "nmaxm10", "nmaxm15", "nmaxm30", "dmaxm5", "dmaxm10", "dmaxm15", 
    "dmaxm30", "maxhourly", "maxh2", "maxh3", "maxh4", "maxh5", 
    "maxh6", "maxh8", "maxh12", "maxh18", "maxdaily")), pars = structure(c(9.43730555970531, 
    0.355744546440369, 0.0141306464171967, 2.50913042364416, 
    0.368250713406274, 92.0687563990534), .Names = c("a", "l", 
    "v", "k", "f", "mx")), stats = structure(list(mean1 = 0.0186770428015564, 
        mean6 = 0.111627906976744, mean12 = 0.223255813953488, 
        mean24 = 0.436363636363636, var1 = 0.0359857707389962, 
        var6 = 0.390216142270862, var12 = 0.800398671096346, 
        var24 = 1.5795670995671, pdr1 = 0.972762645914397, pdr6 = 0.895348837209302, 
        pdr12 = 0.86046511627907, pdr24 = 0.772727272727273, 
        cov1lag1 = 0.0103119680100725, cov6lag1 = 0.00320827096985171, 
        cov12lag1 = -0.0323976505213377, cov24lag1 = -0.199068369646882), .Names = c("mean1", 
    "mean6", "mean12", "mean24", "var1", "var6", "var12", "var24", 
    "pdr1", "pdr6", "pdr12", "pdr24", "cov1lag1", "cov6lag1", 
    "cov12lag1", "cov24lag1")), dismax = c(2.345, 4.085, 4.884, 
    4.884), normax = c(0.8, 1.4, 2, 3), corr = 0.848495355933634), .Names = c("max", 
"pars", "stats", "dismax", "normax", "corr"))), .Names = c("1-2006", 
"1-2007"))

基于OP的更新,我们基于“ht”的
名称的子字符串
拆分
列表
rbind
使用
do.call的内部列表
,并使用
colMaxs
(来自
矩阵状态

或者使用
apply
MARGIN=2
在列上循环以获得
max

lapply(split(ht, sub("^\\d+-", "", names(ht))), function(x) 
         apply(do.call(rbind, x), 2, max))
#$`2006`
#   nmaxm5   nmaxm10   nmaxm15   nmaxm30    dmaxm5   dmaxm10   dmaxm15   dmaxm30 maxhourly     maxh2     maxh3     maxh4     maxh5     maxh6     maxh8 
#    1.600     3.200     2.600     4.400     0.575     0.947     1.306     2.184     4.400     5.400     8.600     7.200     7.400     8.800     8.000 
#   maxh12    maxh18  maxdaily 
#    8.800    11.200    13.800 

#$`2007`
#   nmaxm5   nmaxm10   nmaxm15   nmaxm30    dmaxm5   dmaxm10   dmaxm15   dmaxm30 maxhourly     maxh2     maxh3     maxh4     maxh5     maxh6     maxh8 
#    0.800     1.400     2.000     3.000     2.345     4.085     4.884     4.884     3.800     5.600     8.200     9.200    10.200     9.800     9.800 
#   maxh12    maxh18  maxdaily 
#    9.800    11.200    13.600 
library(dplyr)
library(purrr)
library(tibble)
library(stringr)
map_df(ht, enframe, .id = 'year') %>% 
    group_by(year = str_remove(year, "^\\d+-"), name) %>% 
    summarise(value = max(value)) %>% 
    split(.$year)
更新 对于更新后的问题,我们可以使用
[[
提取
max
元素,然后应用相同的代码

ht1 <- lapply(data, "[[", "max")
lapply(split(ht1, sub("^\\d+-", "", names(ht1))), function(x) 
           colMaxs(do.call(rbind, x)))

我想我不善于解释自己。我编辑了我的问题。代码有效,但我用添加的内容更新了问题。因为我的原始数据中还有其他列表。@HüsamettinTayşI对于这种情况,您可以执行
ht1
lapply(split(ht, sub("^\\d+-", "", names(ht))), function(x) 
         apply(do.call(rbind, x), 2, max))
#$`2006`
#   nmaxm5   nmaxm10   nmaxm15   nmaxm30    dmaxm5   dmaxm10   dmaxm15   dmaxm30 maxhourly     maxh2     maxh3     maxh4     maxh5     maxh6     maxh8 
#    1.600     3.200     2.600     4.400     0.575     0.947     1.306     2.184     4.400     5.400     8.600     7.200     7.400     8.800     8.000 
#   maxh12    maxh18  maxdaily 
#    8.800    11.200    13.800 

#$`2007`
#   nmaxm5   nmaxm10   nmaxm15   nmaxm30    dmaxm5   dmaxm10   dmaxm15   dmaxm30 maxhourly     maxh2     maxh3     maxh4     maxh5     maxh6     maxh8 
#    0.800     1.400     2.000     3.000     2.345     4.085     4.884     4.884     3.800     5.600     8.200     9.200    10.200     9.800     9.800 
#   maxh12    maxh18  maxdaily 
#    9.800    11.200    13.600 
ht1 <- lapply(data, "[[", "max")
lapply(split(ht1, sub("^\\d+-", "", names(ht1))), function(x) 
           colMaxs(do.call(rbind, x)))
library(dplyr)
library(purrr)
library(tibble)
library(stringr)
map_df(ht, enframe, .id = 'year') %>% 
    group_by(year = str_remove(year, "^\\d+-"), name) %>% 
    summarise(value = max(value)) %>% 
    split(.$year)