Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 选择最后一行并将其放置在顶部_R - Fatal编程技术网

R 选择最后一行并将其放置在顶部

R 选择最后一行并将其放置在顶部,r,R,我有一个数据框,我想对它重新排序。我想把最后一排排排在第一排 例如,如果我在控制台中键入mtcars,则列出的最后一辆车是沃尔沃142E。假设我想把它排在第一排,我会怎么做 首选dplyr/tidyverse或base r。我们可以使用slice 在R底- mtcars[c(nrow(mtcars), seq(nrow(mtcars)-1)), ] # top 6 rows mpg cyl disp hp drat wt qsec vs am g

我有一个数据框,我想对它重新排序。我想把最后一排排排在第一排

例如,如果我在控制台中键入mtcars,则列出的最后一辆车是沃尔沃142E。假设我想把它排在第一排,我会怎么做

首选dplyr/tidyverse或base r。

我们可以使用slice

在R底-

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
这是一个将任意一行移到顶部的通用函数-

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

这里有一个base R方法,它也适用于除最后一行之外的其他行

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
# ...
或者dplyr中的order方法


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

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
#...

简单的问题。你如何把所有的输出放在前面?我肯定你不是手工做的。我总是在没有答案的情况下发布答案。实际上是手工的。你可以做得很快…像“标签/向下箭头/向左箭头”重复:DOh我的上帝!多有耐心啊!我开始手指练习:@maydin或者你可以将结果复制/粘贴到RStudio的脚本窗口中,并使用ctrl+shift+c对所有内容进行注释。或者,按住alt键并选择所有行的第一个字符,然后输入一个哈希值。请参见alt+鼠标拖动。@可以使用RStudio或记事本,或者任何好的文本编辑器按住alt键,然后使用鼠标将光标扩展到多行,然后键入,完成。
mtcars[c(to_top, setdiff(seq(nrow(mtcars)), to_top)),]
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
# ...
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
#...