r语言 - 按字符串对数据帧排序



我有一个数据框架,需要按字符串对其列进行排序。

我试过了:

  # character string
  a <- c("B", "E", "A", "D", "C")
  # data frame
  data <- data.frame(A = c(0, 0, 1), B = c(1, 1, 1), C = c(1, 0, 1), D = c(0, 0, 1), E = c(0, 1, 1))
  data
  # A B C D E
  # 1 0 1 1 0 0
  # 2 0 1 0 0 1
  # 3 1 1 1 1 1
  # sorting 
  data.sorted <- data[, order(a)]
  # order of characters in data
  colnames(data.sorted)
  # [1] "C" "A" "E" "D" "B"

但是,排序后的数据帧中的列的顺序与原字符串中的字符的顺序不一致。

有什么办法,如何排序?

函数order(a)返回每个排序值在向量a中的位置。因此,由于A(排名第一)位于a的第三位,因此a[1] = 3。同理,"C"(排名第三)位于a的第5位,则a[3] = 5。

幸运的是,你的解决方案实际上更简单,感谢R与括号的工作方式。如果您只要求查看名为"B"的列,您将得到:

> data[, "B", drop=FALSE]
  B
1 1
2 1
3 1

或者如果你想要两个特定的列

> data[, c("B", "E")]
  B E
1 1 0
2 1 1
3 1 1

最后,更一般地说,如果你有一个完整的向量,你想用它来排序你的列,那么你也可以这样做:

> data.sorted <- data[, a]
> data.sorted
  B E A D C
1 1 0 0 0 1
2 1 1 0 0 0
3 1 1 1 1 1
> all(colnames(data.sorted)==a)
[1] TRUE
string[] str = { "H", "G", "F", "D", "S","A" };
Array.Sort(str);
for (int i = 0; i < str.Length; i++)
{
    Console.WriteLine(str[i]);
}
Console.ReadLine();

最新更新