3

Rに次のサンプルデータフレームがあります。

  item index  ptr
     A     1 0.40
     B     2   NA
     C     3 0.30
     D     4 0.35
     E     5 0.44
     F     6   NA

column = に基づいて既にソートされていますindex。ここで、列で並べ替えたいのですがptr、行の位置をそのままにしておきptrますNA。したがって、私が期待している出力は次のとおりです。

  item index  ptr
     C     3 0.30
     B     2   NA
     D     4 0.35
     A     1 0.40
     E     5 0.44
     F     6   NA

レギュラーdf = df[order(ptr),]は効かない。何か案は?よろしくお願いします。

4

2 に答える 2

9

これを試して:

> df
  item index  ptr
1    A     1 0.40
2    B     2   NA
3    C     3 0.30
4    D     4 0.35
5    E     5 0.44
6    F     6   NA
> df[!is.na(df$ptr), ] <- df[order(df$ptr, na.last = NA), ]
> df
  item index  ptr
1    C     3 0.30
2    B     2   NA
3    D     4 0.35
4    A     1 0.40
5    E     5 0.44
6    F     6   NA
于 2012-04-24T18:09:03.620 に答える
4
ptr.na <- is.na(df$ptr)
order.idx <- seq(length=nrow(df))
ptr.idx <- which(!ptr.na)
order.idx[!ptr.na] <- ptr.idx[order(df[ptr.idx,"ptr"])]
df[order.idx,]

与える

> df[order.idx,]
  item index  ptr
3    C     3 0.30
2    B     2   NA
4    D     4 0.35
1    A     1 0.40
5    E     5 0.44
6    F     6   NA
于 2012-04-24T18:09:17.723 に答える