R 如何按降序对数据帧进行排序
我有一个数据。framev1,v2,y 现在我想让它按y排序如下:R 如何按降序对数据帧进行排序,r,sorting,R,Sorting,我有一个数据。framev1,v2,y 现在我想让它按y排序如下: y: 1 2 3 4 1 2 3 4 v1: 1 8 1 6 5 6 1 8 v2: 2 9 4 2 6 8 5 3 我试过: sorted <- df[,,sort(df$y)] 但这是行不通的。。请帮助您可以尝试tidyverse解决方案 library(tidyverse) data.frame(y, v1, v2) %>% group_by(y) %>% mutate(n=1:n(
y: 1 2 3 4 1 2 3 4
v1: 1 8 1 6 5 6 1 8
v2: 2 9 4 2 6 8 5 3
我试过:
sorted <- df[,,sort(df$y)]
但这是行不通的。。请帮助您可以尝试tidyverse解决方案
library(tidyverse)
data.frame(y, v1, v2) %>%
group_by(y) %>%
mutate(n=1:n()) %>%
arrange(n, y) %>%
select(-n) %>%
ungroup()
# A tibble: 8 x 3
y v1 v2
<dbl> <dbl> <dbl>
1 1 1 2
2 2 8 9
3 3 1 4
4 4 6 2
5 1 5 6
6 2 6 8
7 3 1 5
8 4 8 3
数据:
其思想是沿y添加索引,然后按索引和y排列 你可以试试tidyverse解决方案
library(tidyverse)
data.frame(y, v1, v2) %>%
group_by(y) %>%
mutate(n=1:n()) %>%
arrange(n, y) %>%
select(-n) %>%
ungroup()
# A tibble: 8 x 3
y v1 v2
<dbl> <dbl> <dbl>
1 1 1 2
2 2 8 9
3 3 1 4
4 4 6 2
5 1 5 6
6 2 6 8
7 3 1 5
8 4 8 3
数据:
其思想是沿y添加索引,然后按索引和y排列 我们可以使用基于R的ave,按“y”组创建一个序列,并对其进行排序
数据
我们可以使用基于R的ave创建一个序列,按“y”组排序
数据
您还可以执行两次交替子集,并将它们结合在一起:
rbind(df[c(TRUE,FALSE),], df[c(FALSE,TRUE),])
结果是:
v1 v2 y
1 1 2 1
3 8 9 2
5 1 4 3
7 6 2 4
2 5 6 1
4 6 8 2
6 1 5 3
8 8 3 4
您还可以执行两次交替子集,并将它们结合在一起:
rbind(df[c(TRUE,FALSE),], df[c(FALSE,TRUE),])
结果是:
v1 v2 y
1 1 2 1
3 8 9 2
5 1 4 3
7 6 2 4
2 5 6 1
4 6 8 2
6 1 5 3
8 8 3 4
您可以使用矩阵对行的索引进行重新排序:
df <- data.frame(v1 = c(1, 5, 8, 6, 1, 1, 6, 8),
v2 = c(2, 6, 9, 8, 4, 5, 2, 3),
y = c(1, 1, 2, 2, 3, 3, 4, 4))
df[c(matrix(1:nrow(df), ncol=2, byrow=TRUE)),]
# v1 v2 y
# 1 1 2 1
# 3 8 9 2
# 5 1 4 3
# 7 6 2 4
# 2 5 6 1
# 4 6 8 2
# 6 1 5 3
# 8 8 3 4
该解决方案使用了矩阵元素在R中存储的顺序,就像在FORTRAN中一样,第一维的索引首先运行。在FORTRAN中,对于二维数组(即矩阵),第一个维度的值数使用端点前导维度。它是行数。您可以使用矩阵对行的索引进行重新排序:
df <- data.frame(v1 = c(1, 5, 8, 6, 1, 1, 6, 8),
v2 = c(2, 6, 9, 8, 4, 5, 2, 3),
y = c(1, 1, 2, 2, 3, 3, 4, 4))
df[c(matrix(1:nrow(df), ncol=2, byrow=TRUE)),]
# v1 v2 y
# 1 1 2 1
# 3 8 9 2
# 5 1 4 3
# 7 6 2 4
# 2 5 6 1
# 4 6 8 2
# 6 1 5 3
# 8 8 3 4
该解决方案使用了矩阵元素在R中存储的顺序,就像在FORTRAN中一样,第一维的索引首先运行。在FORTRAN语言中,对于二维数组(即矩阵),第一个维度的值数使用端点前导维度。它是行数。您也可以使用mutaten=row\u numbery您也可以使用mutaten=row_number@Renu否,这将复制原始数据帧-不是所需的输出。@Renu否,这将再现原始数据帧,而不是期望的输出。