我有一个csv文件,需要按列排序。然而,订单来自order.cfg文件。 eg.my df看起来像这样
C1,C2,C3
A, 51,60
B, 91,10
M, 31,56
Z, 34,20
现在如果order.cfg如下所示
M
Z
然后df应按照向上推M和Z的方式进行排序
C1,C2,C3
M, 31,56
Z, 34,20
A, 51,60
B, 91,10
我知道如何根据列值进行排序,但这里需要通过我的可配置order.cfg来完成。
我的一个天真的方法是在df中逐个grep每个元素。
然而,必须有更好的方法来做到这一点。
答案 0 :(得分:1)
我在数据框中读到这些内容,' df1'和' order.cfg',其中stringsAsFactors = FALSE。然后,这将提供所需的顺序:
[{"code":"I77.812","description":"Thoracoabdominal Aortic Ectasia"}]
[{"code":"I77.811","description":"Abdominal Aortic Ectasia"},{"code":"I77.811","description":"Abdominal Aortic Ectasia"}]
[{"code":"I06.1","description":"Rheumatic aortic insufficiency"},{"code":"I06.1","description":"Rheumatic aortic insufficiency"},{"code":"I06.1","description":"Rheumatic aortic insufficiency"}]
答案 1 :(得分:0)
如果order.cfg
数据被视为具有两个元素的vector
(' v1')(' M',' Z&#39 ;),我们改变了C1'专栏' df1'通过连接(factor
)' C1'中常见的元素,指定levels
到c
类。和' v1' (intersect(df1$C1, v1)
),然后是' C1'中存在的元素。而不是在' v1' (setdiff(df1$C1, v1)
),order
并将其用作索引以重新排序' df1'的行。
df2 <- df1[order(factor(df1$C1, levels=c(intersect(df1$C1,v1),
setdiff(df1$C1, v1)))),]
row.names(df2) <- NULL
df2
# C1 C2 C3
#1 M 31 56
#2 Z 34 20
#3 A 51 60
#4 B 91 10
v1 <- c('M', 'Z')
df1 <- structure(list(C1 = c("A", "B", "M", "Z"), C2 = c(51L, 91L, 31L,
34L), C3 = c(60L, 10L, 56L, 20L)), .Names = c("C1", "C2", "C3"
), class = "data.frame", row.names = c(NA, -4L))