[英]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.