这是我的第一个问题,很高兴来到这里 :) 所以我有一个数据框,例如:
date <- as.Date(c('2019-03-1','2019-4-25','2019-5-25','2019-6-14','2019-7-14','2019-8-15'))
US <- c(340, 450, 100, 400, 500, 350)
JP <- c(600, 700, 400, 600, 500, 700)
CHN <- c(400, 550, 450, 600, 200, 300)
GER <- c(800, 900, 700, 700, 600, 900)
IT <- c(400, 500, 350, 600, 600, 500)
BR <- c(300, 400, 450, 300, 450, 250)
df <- data.frame(date, US, JP, CHN, GER, IT, BR)
Run Code Online (Sandbox Code Playgroud)
这使
startdate US JP CHN GR IT BR
1 2019-03-01 340 600 400 800 400 300
2 2019-04-25 450 700 550 900 500 400
3 2019-05-25 100 400 450 700 350 450
4 2019-06-14 400 600 600 700 600 300
5 2019-07-14 500 500 200 600 600 450
6 2019-08-15 350 700 300 900 500 250
Run Code Online (Sandbox Code Playgroud)
我想要的是更改此数据框中列的顺序,以便在最后日期(在本例中为“2019-08-15”)具有最高值的国家/地区将是第二列,具有第二高值的国家/地区最后一个日期将是第三列,依此类推。它只是关于最后一个值,而不是更早的日期。就像这里:
startdate GR JP IT US CHN BR
1 2019-03-01 800 600 400 340 400 300
2 2019-04-25 900 700 500 450 550 400
3 2019-05-25 700 400 350 100 450 450
4 2019-06-14 700 600 600 400 600 300
5 2019-07-14 600 500 600 500 200 450
6 2019-08-15 900 700 500 350 300 250
Run Code Online (Sandbox Code Playgroud)
试图弄清楚它现在两天了,但一无所获。请帮忙 :)
一个基本的 R 选项是获取数据帧的最后一行,并order根据其中的值获取它们。在订购时,我们忽略该date列。
df[c(1, order(-df[nrow(df), -1]) + 1)]
# date GER JP IT US CHN BR
#1 2019-03-01 800 600 400 340 400 300
#2 2019-04-25 900 700 500 450 550 400
#3 2019-05-25 700 400 350 100 450 450
#4 2019-06-14 700 600 600 400 600 300
#5 2019-07-14 600 500 600 500 200 450
#6 2019-08-15 900 700 500 350 300 250
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
256 次 |
| 最近记录: |