简体   繁体   English

如何在 R 中按组对这个数据框进行排序?

[英]How order this dataframe in groups in R?

I have a dataset that I want to order followinf the second column groups.我有一个数据集,我想对第二个列组进行排序。 In the second columns there are different currency names.在第二列中有不同的货币名称。 So I want to create a group for each currency.所以我想为每种货币创建一个组。

This below is the dataset:下面是数据集:

data = structure(list(repCountry = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L
), .Label = c("\"AR:Argentina\"", "\"AU:Australia\"", "\"BR:Brazil\"", 
"\"CA:Canada\"", "\"CN:China\"", "\"DE:Germany\"", "\"ES:Spain\"", 
"\"FR:France\"", "\"GB:United Kingdom\"", "\"HK:Hong Kong SAR\"", 
"\"IT:Italy\"", "\"JP:Japan\"", "\"US:United States\""), class = "factor"), 
    leg1 = structure(c(2L, 1L, 5L, 9L, 10L, 11L, 8L, 7L, 3L, 
    6L, 4L, 8L, 11L, 1L, 5L, 10L, 9L, 2L, 4L, 3L, 6L, 7L), .Label = c("\"AUD:Australian dollar\"", 
    "\"BRL:Brazilian real\"", "\"CAD:Canadian dollar\"", "\"CHF:Swiss franc\"", 
    "\"CNY:Renminbi\"", "\"EUR:Euro\"", "\"GBP:Pound (sterling)\"", 
    "\"HKD:Hong Kong dollar\"", "\"JPY:Yen\"", "\"TO1:Total (all currencies)\"", 
    "\"USD:US dollar\""), class = "factor"), Gt = c(112.375047961389, 
    -41.2198342257757, 62268.4495599188, -84.3213591350023, 68.4436291746986, 
    70.9169969830646, -99.4117647058823, -6.83896195532242, -23.5802695170257, 
    -17.5883684281091, -44.795805996616, 82.7128411239166, -31.8927700859182, 
    -34.0249279867178, 3523.06246969501, -32.4135787378764, -29.3556595422536, 
    157.043201084687, -86.9675976509517, -29.5658404010643, -48.2747855690355, 
    -47.8361418946846), Gts = structure(c(37L, 12L, 116L, 27L, 
    121L, 124L, 29L, 23L, 3L, 2L, 14L, 130L, 7L, 9L, 87L, 8L, 
    4L, 55L, 28L, 5L, 16L, 15L), .Label = c("-1.215532e+01", 
    "-1.758837e+01", "-2.358027e+01", "-2.935566e+01", "-2.956584e+01", 
    "-3.088141e+00", "-3.189277e+01", "-3.241358e+01", "-3.402493e+01", 
    "-4.014457e+01", "-4.118616e+01", "-4.121983e+01", "-4.169671e+01", 
    "-4.479581e+01", "-4.783614e+01", "-4.827479e+01", "-4.938668e+01", 
    "-5.256366e+01", "-5.464012e+01", "-5.545936e+00", "-5.599206e+01", 
    "-5.845868e+01", "-6.838962e+00", "-7.325473e+01", "-7.785060e+01", 
    "-8.076875e+01", "-8.432136e+01", "-8.696760e+01", "-9.941176e+01", 
    " 1.013794e+08", " 1.017719e+03", " 1.019378e+02", " 1.042038e+03", 
    " 1.071848e+02", " 1.077316e+01", " 1.087943e+02", " 1.123750e+02", 
    " 1.150602e+03", " 1.153145e+03", " 1.158215e+03", " 1.163811e+02", 
    " 1.185635e+02", " 1.199924e+02", " 1.262059e+02", " 1.343992e+03", 
    " 1.348147e+03", " 1.364472e+03", " 1.369408e+01", " 1.376701e+02", 
    " 1.395496e+02", " 1.411263e+02", " 1.444113e+02", " 1.464842e+02", 
    " 1.496997e+02", " 1.570432e+02", " 1.594602e+10", " 1.633621e+02", 
    " 1.635021e+02", " 1.643968e+02", " 1.751384e+01", " 1.844523e+01", 
    " 1.954386e+04", " 1.975440e+02", " 2.028477e+02", " 2.050697e+02", 
    " 2.257201e+02", " 2.276185e+01", " 2.480550e+02", " 2.493132e+02", 
    " 2.533811e+02", " 2.540240e+02", " 2.584434e+02", " 2.626459e+03", 
    " 2.751123e+02", " 2.754497e+02", " 2.802885e+01", " 2.817294e+00", 
    " 2.832865e+03", " 2.945385e+02", " 3.184162e+01", " 3.235014e+04", 
    " 3.328114e+03", " 3.329685e+04", " 3.411407e+12", " 3.419385e+01", 
    " 3.469049e+01", " 3.523062e+03", " 3.575672e+01", " 3.596696e+02", 
    " 3.852755e+02", " 3.911678e+01", " 3.961276e+01", " 3.981677e+01", 
    " 4.046657e+01", " 4.190054e+03", " 4.197287e+03", " 4.227811e+01", 
    " 4.297378e+02", " 4.308334e+01", " 4.520282e+01", " 4.554441e+01", 
    " 4.860320e+02", " 5.006841e+01", " 5.141330e+01", " 5.293255e+02", 
    " 5.351582e+01", " 5.378182e+01", " 5.401741e+11", " 5.474279e+01", 
    " 5.666665e+12", " 5.685373e+02", " 5.902891e+03", " 5.909937e+00", 
    " 6.151254e+02", " 6.212329e+01", " 6.226845e+04", " 6.233904e+01", 
    " 6.235995e+01", " 6.263863e+01", " 6.672686e+02", " 6.844363e+01", 
    " 7.019654e+01", " 7.041939e+01", " 7.091700e+01", " 7.346154e+02", 
    " 7.447619e+01", " 7.642639e+01", " 7.905064e+09", " 7.920483e+09", 
    " 8.271284e+01", " 8.273516e+01", " 8.385885e+01", " 8.623598e+01", 
    " 8.690800e+06", " 8.900386e+03", " 9.020896e+01", " 9.301330e+01", 
    " 9.605403e+01", " 9.674745e+02", " 9.793816e+01", " 9.806352e+05", 
    " 9.824522e+01", " 9.857736e+01"), class = "factor"), N2007 = c(0.247595, 
    0.027266, 0.001477, 2.331012, 1112.79052, 1078.012129, 0.00017, 
    1.422906, 0.688194, 54.358328, 1.008869, 2047.250254, 160378.810104, 
    89155.149959, 61.406975, 176289.450977, 18721.335755, 22.580521, 
    7386.027681, 4140.161255, 30650.859656, 13658.036993), N2019 = c(0.52583, 
    0.016027, 0.921182, 0.365471, 1874.424737, 1842.505958, 0.000001, 
    1.325594, 0.525916, 44.797585, 0.556938, 3740.589104, 109229.564931, 
    58820.174389, 2224.813065, 119147.730978, 13225.564169, 58.041694, 
    962.576845, 2916.087786, 15854.222882, 7124.559037)), row.names = c(NA, 
22L), class = "data.frame")

I've tried to use dplyr, but it's not working.我试过使用 dplyr,但它不起作用。

data_sort = data %>%
  group_by(leg1) %>%
  top_n(9, leg1)

The final expected output of the second column (the rows of all dataset should follow this order) should be equal to:第二列的最终预期输出(所有数据集的行应遵循此顺序)应等于:

sorted_2nd_col = structure(c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L, 5L, 5L, 6L, 6L, 7L, 
7L, 8L, 8L, 9L, 9L, 10L, 10L, 11L, 11L), .Label = c("\"AUD:Australian dollar\"", 
"\"BRL:Brazilian real\"", "\"CAD:Canadian dollar\"", "\"CHF:Swiss franc\"", 
"\"CNY:Renminbi\"", "\"EUR:Euro\"", "\"GBP:Pound (sterling)\"", 
"\"HKD:Hong Kong dollar\"", "\"JPY:Yen\"", "\"TO1:Total (all currencies)\"", 
"\"USD:US dollar\""), class = "factor")

How can I order this data in groups created following the second column?如何在第二列之后创建的组中对这些数据进行排序?

We can just use arrange我们可以只使用arrange

library(dplyr)
data2 <- data %>% 
            group_by(leg1) %>%
            top_n(9, leg1) %>%
            arrange(leg1) 

identical(sorted_2nd_col, data2$leg1)
#[1] TRUE

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM