按字符串对数据进行排序

时间:2015-10-09 11:50:20

标签: r string sorting dataframe

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

我试过这样:

  # 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"

但是,排序数据框中的列顺序与原始字符串中的字符不同。

有什么办法,如何排序?

2 个答案:

答案 0 :(得分:3)

函数order(a)返回每个排名值所在的向量a中的位置。因此,由于“A”(排名第一)位于a的第三个位置, a[1]等于3.类似地,“C”(排名第三)位于a的第五个位置,然后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

答案 1 :(得分:0)

var postData = {
   loginId: $scope.user.id
};

$http({
     method: "POST",
     url: checkUserURL,
     data: postData,
     cache:false
});