3

ベクトル自体をソートせずに、リストに変換してソートしようとしている文字列のデータテーブルがあります。

> DT <- data.table(x=c("A11, A12, A41",
+                      "A11, A41, B11, A6, A21",
+                      "A41, A12",
+                      "A12, A41",
+                      "A12, A6, B41, A93"));DT
                        x
1:          A11, A12, A41
2: A11, A41, B11, A6, A21
3:               A41, A12
4:               A12, A41
5:      A12, A6, B41, A93

私が到達する必要があるもの:

                        x
1:          A11, A12, A41
2: A11, A21, A41, A6, B11
3:               A12, A41
4:               A12, A41
5:      A12, A6, A93, B41

私はordering 、as.lists、および inの束と、私が書こうとしdata.framesた関数を使用してみました:data.table

sortlists <- function(DT,col){
  for(i in 1:length(DT[,col])){
    DT[i,col]=order(DT[i,col])
  }
}

これは、列の位置が ncol(x) より大きいというエラーをスローします。とにかく、私が望む結果を得るためのより良い方法があるに違いありません。私はRにかなり慣れていないため、data.tablesに非常に慣れていないため(良いことを聞いたので、もっと実装したいと思います)、どんな助けも大歓迎です!

4

1 に答える 1

5

これにより、文字ベクトルが分割され、ソートされて各行のリストが返されます

 DT[, list(y =  lapply(strsplit(x,', '), sort))]
                    y
1:        A11,A12,A41
2: A11,A21,A41,A6,B11
3:            A12,A41
4:            A12,A41
5:     A12,A6,A93,B41

と。各行に単一の文字列が本当に必要な場合

DT[, list(y =  vapply(strsplit(x,', '), function(x) paste(sort(x), collapse = ', '), FUN.VALUE =character(1)))]
于 2012-12-06T00:02:05.007 に答える