如何在R中重新排列data.frame的行?

时间:2019-06-08 15:43:48

标签: r database

我有一个用于模式选择问题的数据集:

        mode    wait    vcost   wcost   gcost   income   age    size
   1    air     no         69   59  100 70  35  1
   1    train   no         34   31  372 71  35  1
   1    bus     no         35   25  417 70  35  1
   1    car     yes         0   10  180 30  35  1
   2    air     no         64   58  68  68  30  2
   2    train   no         44   31  354 84  30  2
   2    bus     no         53   25  399 85  30  2
   2    car     yes         0   11  255 50  30  2

我想以相同的模式一起划行,例如,在此示例中,我希望拥有2个人和4个选项:

        mode    wait    vcost   wcost   gcost   income   age    size
   1    air      no    69   59  100 70  35  1
   2    air      no    64   58  68  68  30  2
   1    train    no    34   31  372 71  35  1
   2    train    no    44   31  354 84  30  2
   1    bus      no    35   25  417 70  35  1
   2    bus      no    53   25  399 85  30  2
   1    car      yes    0   10  180 30  35  1
   2    car      yes    0   11  255 50  30  2

1 个答案:

答案 0 :(得分:0)

您只需要根据需要订购data.frame,您需要指定所需的订单,想象一下您的data.frame是以下商品:

df <- data.frame(name = c("A", "B", "A", "C", "B"), value = rnorm(5))
df :
  name      value
1    A  0.2597374
2    B  1.1343221
3    A -0.2412978
4    C -0.5003403
5    B -0.9401539

您可以手动选择订单:

select_order <- c(1, 3, 2, 5, 4)
df <- df[select_order, ]
df

  name      value
1    A  0.2597374
3    A -0.2412978
2    B  1.1343221
5    B -0.9401539
4    C -0.5003403

实际上,您只是更改行顺序。 但是,您还想针对一列对data.frame进行排序。您可能希望根据name的字母顺序对data.frame进行排序,可以使用初始df进行操作:

df <- df[order(df$name), ]

编辑1:

  • 如果只是顺序问题:df <- df[order(df$name), ]很完美
  • 如果要使用dplyr并在单独的组上计算一些特定的摘要,可以使用:group_by(df, name)
  • 如果您想为每种模式使用特定的data.frame列表,可以使用split(df, name)函数