简体   繁体   English

R如何有选择地对数据框进行排序?

[英]R how to selectively sort a data frame?

I have the following example data frame in R. 我在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

It is already sorted based on column = index . 它已经基于column = index排序。 Now, I would like to sort it by the column ptr but by leaving the position of rows where ptr = NA intact. 现在,我想通过列ptr对其进行排序,但是保留ptr = NA完整的行的位置。 So the output I'm expecting is: 所以我期望的输出是:

  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

The regular df = df[order(ptr),] doesn't work. 常规df = df[order(ptr),]不起作用。 Any ideas? 有任何想法吗? Thanks much in advance. 非常感谢提前。

try this: 尝试这个:

> 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
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,]

gives

> 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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM