执行以下任务的好方法是什么?
我有一个数据框,例如:
v2 <- c(4.5, 2.5, 3.5, 5.5, 7.5, 6.5, 2.5, 1.5, 3.5)
v1 <- c(2.2, 3.2, 1.2, 4.2, 2.2, 3.2, 2.2, 1.2, 5.2)
lvl <- c("a","a","a","b","b","b","c","c","c")
d <- data.frame(v1,v2,lvl)
> d
v1 v2 l
1 2.2 4.5 a
2 3.2 2.5 a
3 1.2 3.5 a
4 4.2 5.5 b
5 2.2 7.5 b
6 3.2 6.5 b
7 2.2 2.5 c
8 1.2 1.5 c
9 5.2 3.5 c
在d$lvl
的每个级别中,我想按d$v1
的值对数据框进行排序。所以我想得到
v1 v2 l
3 1.2 3.5 a
1 2.2 4.5 a
2 3.2 2.5 a
5 2.2 7.5 b
6 3.2 6.5 b
4 4.2 5.5 b
8 1.2 1.5 c
7 2.2 2.5 c
9 5.2 3.5 c
答案 0 :(得分:11)
我认为最简单的方法是
d[order(d$lvl,d$v1),]
给出了
v1 v2 lvl
3 1.2 3.5 a
1 2.2 4.5 a
2 3.2 2.5 a
5 2.2 7.5 b
6 3.2 6.5 b
4 4.2 5.5 b
8 1.2 1.5 c
7 2.2 2.5 c
9 5.2 3.5 c
答案 1 :(得分:1)
我相信这也是使用dplyr
的合法解决方案:
require(data.table)
require(dplyr)
require(dtplyr)
DT <- as.data.table(d)
DT %>% group_by(lvl) %>% arrange(v1)
答案 2 :(得分:1)
使用dplyr
,可以将.by_group = TRUE
添加到arrange()
以便对每个组中的列进行排序。试试:
library(dplyr)
d %>%
group_by(lvl) %>%
arrange(v1, .by_group = TRUE)
# output
# A tibble: 9 x 3
# Groups: lvl [3]
v1 v2 lvl
<dbl> <dbl> <fctr>
1 1.2 3.5 a
2 2.2 4.5 a
3 3.2 2.5 a
4 2.2 7.5 b
5 3.2 6.5 b
6 4.2 5.5 b
7 1.2 1.5 c
8 2.2 2.5 c
9 5.2 3.5 c