2017-12-20 16 views
2

Iは、このデータセットを持っていますグループ使用dplyrsは要約:dplyr Y列のすべての最大値と対応するx値を見つける

library(magrittr) 
library(dplyr) 

df %<>% group_by(type) 

df_summary <- df %>% summarize(maximum = max(y)) 

意図したように、私に各グループの最大値を与えます。

> df_summary 
# A tibble: 14 x 2 
    type maximum 
    <dbl> <dbl> 
1  1 400.4390 
2  2 400.4395 
3  3 400.4470 
4  4 400.4450 
5  5 400.4485 
6  6 400.4360 
7  7 400.4350 
8  8 400.4250 
9  9 400.4230 
10 10 400.4235 
11 11 400.4230 
12 12 400.4260 
13 13 400.4200 
14 14 400.4145 

私の最初の質問は、要約を使用して最大y値に属するx値を取得する方法はありますか?私は、利用元のデータから必要なものを得るために計算された最大値を使用するためのループ:

for (i in unique(df_summary$type)){ 
    if (i == 1){ 
    aux <- df[(df$type == i) & (df$y == df_summary$maximum[i]),] 
    aux$value <- "maximum" 
    df_summary2 <- aux 
    } else { 
    aux <- df[(df$type == i) & (df$y == df_summary$maximum[i]),] 
    aux$value <- "maximum" 
    df_summary2 <- rbind(df_summary2, aux) 
    } 
} 

> df_summary2 
# A tibble: 16 x 4 
# Groups: type [14] 
     x  y type value 
    <dbl> <dbl> <dbl> <chr> 
1 139.70 400.4390  1 maximum 
2 143.30 400.4395  2 maximum 
3 426.70 400.4470  3 maximum 
4 151.50 400.4450  4 maximum 
5 146.20 400.4485  5 maximum 
6 151.20 400.4485  5 maximum 
7 99.90 400.4360  6 maximum 
8 445.40 400.4350  7 maximum 
9 323.40 400.4250  8 maximum 
10 320.20 400.4230  9 maximum 
11 97.90 400.4235 10 maximum 
12 95.00 400.4230 11 maximum 
13 108.55 400.4230 11 maximum 
14 98.90 400.4260 12 maximum 
15 108.70 400.4200 13 maximum 
16 111.50 400.4145 14 maximum 

ループを使用せずに同じ結果を取得する方法はありますか?

データ:

structure(list(x = c(70, 72, 94.1, 105.6, 122.65, 132.2, 149.2, 
    162.2, 183.3, 188.8, 207.4, 222.9, 239.4, 247.4, 264.5, 275.5, 
    298.6, 302.6, 324.6, 336.6, 353.7, 360.7, 377.8, 392.8, 411.8, 
    417.8, 438.9, 451.9, 77.1, 86.65, 103.7, 115.2, 137.75, 139.3, 
    162.3, 173.4, 190.4, 200.4, 217.4, 230.5, 251.5, 256.6, 275.6, 
    290.6, 307.7, 315.7, 332.7, 343.8, 366.8, 369.8, 392.9, 403.9, 
    421, 429, 446, 70.3, 88.9, 94.4, 115.4, 128.5, 145.5, 154.6, 
    171.6, 183.6, 205.7, 207.7, 230.7, 241.8, 258.8, 267.8, 284.9, 
    297.9, 319, 325, 344, 359, 376.1, 383.1, 400.2, 411.2, 434.2, 
    438.2, 70.3, 81.4, 98.4, 105.9, 122.95, 138, 156.6, 162.6, 183.6, 
    198.6, 215.7, 224.7, 241.8, 252.8, 275.8, 277.8, 299.9, 311.45, 
    330, 340, 357, 370.1, 390.2, 396.2, 415.2, 430.2, 447.3, 454.3, 
    82, 93, 115.6, 119.1, 142.2, 153.2, 170.2, 177.75, 194.8, 209.85, 
    228.4, 234.4, 255.4, 268.5, 285.5, 294.6, 311.6, 322.6, 345.7, 
    347.7, 369.8, 381.8, 398.8, 407.8, 424.9, 437.9, 459, 75.8, 94.9, 
    109.9, 127, 134, 151, 162.1, 185.1, 189.1, 211.2, 223.2, 239.75, 
    247.3, 264.3, 279.4, 298.4, 303.9, 324.5, 337.5, 356.6, 367.1, 
    384.6, 396.6, 422.7, 424.7, 447.8, 458.8, 85.5, 95.05, 111.6, 
    125.6, 145.7, 151.7, 170.7, 185.8, 202.8, 209.8, 226.9, 238.4, 
    261, 265, 287, 299, 316.1, 323.1, 342.2, 357.2, 380.2, 385.3, 
    406.3, 419.4, 436.4, 445.4, 72.8, 84.3, 106.9, 108.9, 131.9, 
    143, 160, 169, 186.1, 199.1, 220.2, 226.2, 244.2, 259.75, 276.3, 
    284.3, 301.4, 312.4, 335.4, 338.95, 361.5, 372.6, 389.6, 397.6, 
    414.6, 429.7, 448.7, 453.8, 86.6, 99.7, 116.7, 126.25, 142.8, 
    154.8, 176.9, 178.9, 201.9, 213, 230, 239.5, 256.1, 270.1, 290.2, 
    296.2, 315.2, 332.2, 349.3, 356.3, 377.4, 388.4, 411.4, 414.5, 
    437.5, 448.6, 76.9, 84.9, 101.9, 117, 136, 141, 162.1, 175.1, 
    192.2, 201.7, 218.7, 230.2, 252.3, 254.3, 277.4, 288.4, 305.4, 
    314.95, 331.5, 345.5, 365.6, 371.6, 390.6, 405.7, 422.7, 429.8, 
    446.8, 457.8, 90, 93.5, 116.1, 127.1, 144.2, 152.2, 169.2, 184.2, 
    202.8, 208.3, 229.4, 242.4, 259.4, 268.5, 285.5, 297.5, 319.6, 
    321.6, 344.6, 355.7, 372.7, 381.8, 398.8, 412.3, 432.9, 438.9, 
    457.9, 82.3, 98.9, 106.4, 123.4, 134.5, 157.5, 161.05, 183.6, 
    194.6, 211.7, 219.7, 236.7, 251.8, 270.8, 275.8, 296.9, 309.9, 
    331, 340, 357, 368.55, 391.1, 393.1, 417.2, 429.2, 447.75, 457.3, 
    84.2, 97.2, 118.2, 123.75, 142.3, 157.85, 174.9, 182.4, 199.4, 
    210.5, 233.5, 237.5, 259.6, 271.6, 288.6, 295.7, 312.7, 327.8, 
    346.8, 352.8, 375.35, 390.4, 407.45, 421, 439.5, 451, 88.5, 90.5, 
    113.5, 124.6, 141.6, 150.6, 167.7, 180.7, 201.8, 206.8, 225.8, 
    240.9, 257.9, 265.9, 282.5, 294, 316.1, 320.1, 342.65, 354.2, 
    371.2, 378.2, 395.3, 410.3, 429.4, 434.4, 455.4), y = c(400.42, 
    400.42, 400.431, 400.433, 400.436, 400.4375, 400.4375, 400.4315, 
    400.42, 400.4175, 400.4075, 400.406, 400.409, 400.409, 400.411, 
    400.4075, 400.4065, 400.4065, 400.4105, 400.4135, 400.4215, 400.4215, 
    400.4265, 400.4295, 400.431, 400.434, 400.435, 400.4325, 400.4245, 
    400.428, 400.435, 400.4375, 400.439, 400.438, 400.432, 400.4285, 
    400.417, 400.411, 400.408, 400.4075, 400.4105, 400.41, 400.409, 
    400.4085, 400.412, 400.412, 400.4145, 400.4185, 400.4265, 400.427, 
    400.432, 400.4325, 400.4375, 400.4375, 400.436, 400.4155, 400.4205, 
    400.423, 400.4285, 400.4325, 400.441, 400.444, 400.436, 400.43, 
    400.4145, 400.4145, 400.4155, 400.4185, 400.4185, 400.4195, 400.4185, 
    400.419, 400.421, 400.421, 400.4255, 400.4325, 400.437, 400.4375, 
    400.4405, 400.443, 400.445, 400.445, 400.417, 400.422, 400.4265, 
    400.431, 400.4335, 400.4395, 400.443, 400.4415, 400.4295, 400.419, 
    400.416, 400.4145, 400.419, 400.421, 400.4195, 400.419, 400.42, 
    400.422, 400.4215, 400.421, 400.424, 400.426, 400.4285, 400.4295, 
    400.436, 400.439, 400.436, 400.433, 400.432, 400.4355, 400.436, 
    400.435, 400.445, 400.4465, 400.442, 400.442, 400.432, 400.425, 
    400.425, 400.426, 400.4285, 400.4265, 400.424, 400.424, 400.428, 
    400.4255, 400.422, 400.422, 400.422, 400.4235, 400.425, 400.428, 
    400.4345, 400.4345, 400.426, 400.4305, 400.434, 400.4345, 400.4325, 
    400.4335, 400.434, 400.433, 400.43, 400.4305, 400.4255, 400.424, 
    400.4265, 400.427, 400.4285, 400.424, 400.424, 400.425, 400.424, 
    400.421, 400.418, 400.417, 400.4215, 400.422, 400.4295, 400.43, 
    400.428, 400.424, 400.421, 400.4235, 400.424, 400.421, 400.425, 
    400.423, 400.422, 400.421, 400.421, 400.42, 400.423, 400.423, 
    400.426, 400.425, 400.422, 400.426, 400.428, 400.4275, 400.427, 
    400.426, 400.423, 400.4245, 400.425, 400.429, 400.433, 400.435, 
    400.4135, 400.414, 400.417, 400.4175, 400.416, 400.4175, 400.415, 
    400.414, 400.4155, 400.4185, 400.416, 400.4165, 400.421, 400.4225, 
    400.42, 400.419, 400.421, 400.423, 400.4225, 400.4205, 400.418, 
    400.4175, 400.4155, 400.4125, 400.413, 400.4185, 400.421, 400.419, 
    400.4165, 400.4175, 400.414, 400.4125, 400.416, 400.417, 400.413, 
    400.413, 400.414, 400.4145, 400.4155, 400.421, 400.42, 400.4195, 
    400.4175, 400.419, 400.421, 400.421, 400.4205, 400.4185, 400.4155, 
    400.413, 400.4105, 400.411, 400.4175, 400.4185, 400.4195, 400.42, 
    400.4215, 400.42, 400.419, 400.4175, 400.415, 400.4175, 400.4165, 
    400.4165, 400.415, 400.414, 400.416, 400.4165, 400.4145, 400.416, 
    400.416, 400.416, 400.414, 400.4115, 400.408, 400.4085, 400.4045, 
    400.4015, 400.406, 400.4065, 400.4065, 400.405, 400.4225, 400.4225, 
    400.42, 400.419, 400.422, 400.419, 400.4185, 400.417, 400.4185, 
    400.4155, 400.4185, 400.4175, 400.42, 400.4185, 400.416, 400.417, 
    400.42, 400.42, 400.417, 400.4125, 400.4105, 400.4105, 400.405, 
    400.4065, 400.409, 400.411, 400.409, 400.4215, 400.426, 400.4235, 
    400.4195, 400.4215, 400.4185, 400.42, 400.42, 400.4195, 400.416, 
    400.4165, 400.4175, 400.4195, 400.4195, 400.4185, 400.4175, 400.4185, 
    400.4185, 400.415, 400.414, 400.409, 400.4065, 400.406, 400.4065, 
    400.4095, 400.41, 400.4075, 400.415, 400.4165, 400.416, 400.413, 
    400.417, 400.414, 400.412, 400.411, 400.414, 400.4125, 400.413, 
    400.414, 400.4155, 400.4155, 400.414, 400.413, 400.415, 400.416, 
    400.4125, 400.411, 400.4065, 400.4065, 400.402, 400.4045, 400.4085, 
    400.407, 400.4125, 400.4125, 400.4115, 400.4085, 400.411, 400.409, 
    400.4025, 400.4035, 400.4055, 400.4055, 400.408, 400.404, 400.4085, 
    400.4085, 400.402, 400.4055, 400.4085, 400.41, 400.4045, 400.4035, 
    400.405, 400.4045, 400.3995, 400.4025, 400.403, 400.405, 400.4045 
    ), type = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
    3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
    4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 
    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 
    7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 
    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 
    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 
    10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 
    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 
    11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 
    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 
    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 
    13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 
    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 
    14, 14, 14, 14)), .Names = c("x", "y", "type"), row.names = c(NA, 
    -379L), class = c("tbl_df", "tbl", "data.frame")) 
+0

おそらく 'DF%>%GROUP_BY(タイプ)%>%スライス(which.max(Y )) ' – akrun

+0

あなたはネクタイをどうやって扱いますか? – Sotos

答えて

1

関係がある場合我々は、各 'タイプ'

df %>% 
    group_by(type) %>% 
    slice(which.max(y)) %>% 
    mutate(value = "maximum") 

ための 'Y' のmax値を有するwhich.maxsliceの行を使用することができ==を使用して、 'y'のmaxと 'y'の比較、filterの行、またはslice

df %>% 
    group_by(type) %>% 
    filter(y == max(y)) %>% 
    #slice(which(y==max(y))) %>% 
    mutate(value = "maximum") 
+2

あなたの2番目の解決策は、私がコメントの結びつきに関する私の質問にしたものです。 – Sotos

+0

2番目のアプローチは空のデータフレームを返しますので、私は結びつきがないと思います。最初のアプローチではすべてのグループに最大値が返されますが、希望の出力をチェックすると、いくつかのグループに別々のx位置に2つの最大値があることがわかります。 – brettljausn

+1

@brettljausn 'dplyr_0.7.4'を使用しています。あなたが与えたdputに基づいて空のデータフレームを与えているわけではありません。あなたは関係で何をしたいですか – akrun

1

またはarrangesliceの組み合わせ:

df %>% 
    group_by(type) %>% 
    arrange(y) %>% 
    slice(n()) 

結果:

# A tibble: 14 x 3 
# Groups: type [14] 
     x  y type 
    <dbl> <dbl> <dbl> 
1 149.20 400.4375  1 
2 137.75 400.4390  2 
3 438.20 400.4450  3 
4 156.60 400.4430  4 
5 153.20 400.4465  5 
6 109.90 400.4345  6 
7 445.40 400.4350  7 
8 312.40 400.4230  8 
9 332.20 400.4210  9 
10 101.90 400.4215 10 
11 93.50 400.4225 11 
12 98.90 400.4260 12 
13 142.30 400.4170 13 
14 90.50 400.4125 14 
関連する問題