跳转/交替序列,它将在数据帧中对行进行排序

时间:2016-12-07 09:50:59

标签: r sequence seq

假设我有一个带行的ds:

cat
dog
lion
miau
wuff
roarr

我想按顺序排序

cat
miau
dog
wuff
lion
roarr

为了做到这一点,我需要用序列

来订购它
1 4 2 5 3 6

让我们用任意的n:

作为一个更一般的例子
n <- 10

ds < data.frame(col=c(paste0(letters[1:n],1),paste0(letters[1:n],2)),stringsAsFactors = F)

ds[,] <- ds[mySeq,]

如何为所有类型的n?

生成该序列(mySeq)
> ds
   col
1   a1
2   b1
3   c1
4   d1
5   e1
6   f1
7   g1
8   h1
9   i1
10  j1
11  a2
12  b2
13  c2
14  d2
15  e2
16  f2
17  g2
18  h2
19  i2
20  j2
> 

编辑: 我可以设想压缩序列1 :( nrow(ds)/ 2)和(nrow(ds)/ 2 + 1):nrow(ds)。 因此,如果n越高,我需要输入很多seqs。不太实际。

gtools mixedsort()不会与“随机”行一起使用:

set.seed(1337)
MHmakeRandomString <- function(n=1, lenght=12)
{
  randomString <- c(1:n)                  # initialize vector
  for (i in 1:n)
  {
    randomString[i] <- paste(sample(c(0:9, letters, LETTERS),
                                    lenght, replace=TRUE),
                             collapse="")
  }
  return(randomString)
}

ds <- data.frame(col=c(paste0(MHmakeRandomString(n),1),paste0(MHmakeRandomString(n),2)),stringsAsFactors = F)

dso <- mixedsort(ds)

我想我确实需要那个序列!

我更新了我的第一个迷你示例!

3 个答案:

答案 0 :(得分:1)

这是另一种方法,试图根据它的基础模式生成数字序列。这意味着没有字符串操作。

 sequence_generator  <- function(n, nrow){
  base_seq=rep(1:n,each=nrow/n)
  res=base_seq+seq(0,(nrow/n)-1)*n
  res
}

sequence_generator(3,6)
# [1] 1 4 2 5 3 6
sequence_generator(10,20)
#[1]  1 11  2 12  3 13  4 14  5 15  6 16  7 17  8 18  9 19 10 20

答案 1 :(得分:0)

我们可以使用sub

ds[order(sub("\\D+", "", ds[,1])), , drop = FALSE]

答案 2 :(得分:0)

怎么样:

func HitApi(callback: (NSDictionary) -> Void){
        let dataToSend:String = "1=First&2=Second"
        let jsonData:NSData?

        // create post request
        let url = NSURL(string: "http://myserver.com")!
        let request = NSMutableURLRequest(URL: url)
        request.HTTPMethod = "POST"
        request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type")
        request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Accept")
        request.HTTPBody = dataToSend.dataUsingEncoding(NSUTF8StringEncoding)

         var dict = ["output":""]

        let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ data,response,error in
            if error != nil{
                dict["output"] = "An error"
                callback(dict)
            }
            do {

                let  data = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as? NSDictionary
                dict["output"] = NSString(data: data!, encoding: NSUTF8StringEncoding)
                callback(dict)

            }catch{
                dict["output"] = "error"
                callback(dict)
            }
        }

        task.resume()
}