首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中逆转模式中数据的顺序

如何在R中逆转模式中数据的顺序
EN

Stack Overflow用户
提问于 2020-12-10 20:17:14
回答 3查看 120关注 0票数 3

我想以特定的顺序反转下面的数据帧。

代码语言:javascript
复制
Stage       Score 
W-3         25
W-3         2 Min 10 Sec
W-2         45
W-2         1 Min 34 Sec
W-1         75
W-1         1 Min 04 Sec

我想按下面的顺序倒过来。

代码语言:javascript
复制
Stage       Score
W-1         75
W-1         1 Min 04 Sec
W-2         45
W-2         1 Min 34 Sec
W-3         25
W-3         2 Min 10 Sec

我正在使用df<- df[seq(dim(df)[1],1),],但它没有起作用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-10 21:05:48

使用order + ave的另一个基本R选项

代码语言:javascript
复制
df[with(df, order(Stage, ave(1:nrow(df), Stage, FUN = seq_along))), ]

这给

代码语言:javascript
复制
  Stage        Score
5   W-1           75
6   W-1 1 Min 04 Sec
3   W-2           45
4   W-2 1 Min 34 Sec
1   W-3           25
2   W-3 2 Min 10 Sec

数据

代码语言:javascript
复制
> dput(df)
structure(list(Stage = c("W-3", "W-3", "W-2", "W-2", "W-1", "W-1"
), Score = c("25", "2 Min 10 Sec", "45", "1 Min 34 Sec", "75",
"1 Min 04 Sec")), row.names = c(NA, -6L), class = "data.frame")
票数 2
EN

Stack Overflow用户

发布于 2020-12-10 20:20:28

我们可以将factorlevels一起使用,按照“Stage”的unique元素的reverse顺序指定。

代码语言:javascript
复制
library(dplyr)
df2 <- df1 %>%
    arrange(factor(as.character(Stage), 
             levels = rev(unique(as.character(Stage)))))

与“日期”一栏相同

代码语言:javascript
复制
df1 %>%
    arrange(factor(as.character(Date), 
             levels = rev(unique(as.character(Date)))))

-output

代码语言:javascript
复制
# Stage        Score       Date
#1   W-1 1 Min 04 Sec 2020-12-15
#2   W-1           75 2020-12-14
#3   W-2 1 Min 34 Sec 2020-12-13
#4   W-2           45 2020-12-12
#5   W-3 2 Min 10 Sec 2020-12-11
#6   W-3           25 2020-12-10

或者使用base R

代码语言:javascript
复制
df2 <- df1[order(factor(df1$Stage, levels = rev(unique(df1$Stage)))),]

数据

代码语言:javascript
复制
df1 <- structure(list(Stage = c("W-3", "W-3", "W-2", "W-2", "W-1", "W-1"
), Score = c("25", "2 Min 10 Sec", "45", "1 Min 34 Sec", "75", 
"1 Min 04 Sec"), Date = structure(18606:18611, class = "Date")),
row.names = c(NA, 
-6L), class = "data.frame")
票数 2
EN

Stack Overflow用户

发布于 2020-12-10 21:00:26

我们还可以使用来自gtoolsgtools

代码语言:javascript
复制
df <- data.frame("Stage" = c('W-3', 'W-3', 'W-2',
                             'W-2', 'W-1', 'W-1'),
                 "Score" = c(25, '2 Min 10 Sec', 45,
                             '1 Min 34 Sec', 75, '1 Min 04 Sec' ))

library(gtools)
df[mixedorder(df$Stage, decreasing = T), ]

代码语言:javascript
复制
  Stage        Score
5   W-1           75
6   W-1 1 Min 04 Sec
3   W-2           45
4   W-2 1 Min 34 Sec
1   W-3           25
2   W-3 2 Min 10 Sec
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65241701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档