【问题标题】:Rearrange rownames of data.frame (non alphabetic)重新排列 data.frame 的行名(非字母)
【发布时间】:2021-05-18 13:36:03
【问题描述】:
set0 <- data.frame(A = c("A", "B", "C", "D", "A", "B", "C", "D", "A", "B"),
                   B = c("E", "F", "G", "H", "I", "E", "F", "G", "H", "I"))

set0 <- table(set0)

result:
> set0
   B
A   E F G H I
  A 1 0 0 1 1
  B 1 1 0 0 1
  C 0 1 1 0 0
  D 0 0 1 1 0

我知道当我想更改列顺序时,可以使用以下命令:

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

以上内容可以以我喜欢的任何方式更改列的顺序。

我正在寻找可以做同样事情的东西,但对于行名。 有什么想法吗?

【问题讨论】:

  • set0[c(4, 3, 2, 1), ]?
  • 我这几天一直在寻找这个解决方案......在任何地方都找不到......如此简单的解决方案。谢谢!
  • 也适用于行名,set0[c("D", "B", "C", "A"), ]set0[c(4, 3, 2, 1), ] 相同
  • @jay.sf,你能写成answer or a community wiki 以便更容易找到吗?

标签: r dataframe rowname


【解决方案1】:

在括号中,列定义在逗号的右侧(即您所做的)。如果您还不知道,行定义在逗号的左侧。因此,您可以使用您最喜欢的以下方法之一:

set0[c(4, 3, 2, 1), ]

set0[4:1, ]

set0[rev(seq(nrow(set0))), ]

set0[c("D", "C", "B", "A"), ]

set0[rev(rownames(set0)), ]

#    B
# A   E F G H I
#   D 0 0 1 1 0
#   C 0 1 1 0 0
#   B 1 1 0 0 1
#   A 1 0 0 1 1

【讨论】:

    【解决方案2】:

    您可以使用factor来定义顺序,例如,

    table(
      transform(
        set0,
        A = factor(A, levels = sort(unique(A), decreasing = TRUE))
      )
    )
    

    给了

       B
    A   E F G H I
      D 0 0 1 1 0
      C 0 1 1 0 0
      B 1 1 0 0 1
      A 1 0 0 1 1
    

    【讨论】:

      猜你喜欢
      • 2018-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      • 2019-10-24
      • 1970-01-01
      • 2014-05-03
      相关资源
      最近更新 更多