首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择最后一行并将其放在顶部。

选择最后一行并将其放在顶部。
EN

Stack Overflow用户
提问于 2019-08-26 14:08:04
回答 4查看 83关注 0票数 0

我有一个数据框架,我想重新排序。我想把最后一行变成最上面的一排。

例如,如果我在控制台中键入mtcars,最后列出的汽车是沃尔沃142 e。假设我想把这变成第一排,我该怎么做呢?

dplyr/tidyverse或基本r优先。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-08-26 14:11:23

在R基中-

代码语言:javascript
复制
mtcars[c(nrow(mtcars), seq(nrow(mtcars)-1)), ]

# top 6 rows
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Volvo 142E        21.4   4  121 109 4.11 2.780 18.60  1  1    4    2
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2

这是一个将任何行移到顶部的广义函数-

代码语言:javascript
复制
move_to_top <- function(df, n) {
  df[c(n, setdiff(1:nrow(df), n)), ]
}

head(move_to_top(mtcars, 32))

                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Volvo 142E        21.4   4  121 109 4.11 2.780 18.60  1  1    4    2
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
票数 4
EN

Stack Overflow用户

发布于 2019-08-26 14:12:57

下面是一个基本的R方法,它也适用于上一行以外的行

代码语言:javascript
复制
to_top <- nrow(mtcars)
mtcars[order(seq(nrow(mtcars)) != to_top),]
#                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
# Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
# Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
# Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
# Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
# Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
# ...


to_top <- which(rownames(mtcars) == 'Valiant')
mtcars[order(seq(nrow(mtcars)) != to_top),]
#                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
# Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
# Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
# Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
# Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
# Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
# Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
# Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
# Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
# ...

您还可以对相同的结果使用setdiff

代码语言:javascript
复制
mtcars[c(to_top, setdiff(seq(nrow(mtcars)), to_top)),]

order方法在dplyr

代码语言:javascript
复制
library(dplyr)

mtcars %>% 
  rownames_to_column() %>% 
  arrange(row_number() != n())

#                rowname  mpg cyl  disp  hp drat    wt  qsec vs am gear carb
# 1           Volvo 142E 21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
# 2            Mazda RX4 21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
# 3        Mazda RX4 Wag 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
# 4           Datsun 710 22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
# 5       Hornet 4 Drive 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
# 6    Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
# ...
票数 2
EN

Stack Overflow用户

发布于 2019-08-26 14:23:24

另一个想法是对行进行子集和绑定,即

代码语言:javascript
复制
rbind(tail(mtcars, 1), head(mtcars, -1))
#                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
#Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
#Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
#Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
#Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
#Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
#Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
#Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
#Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
#Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
#...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57659546

复制
相关文章

相似问题

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