Расположить значение во фрейме данных - PullRequest
0 голосов
/ 07 сентября 2018
T
-----
2016m1
2016m10
2016m11
2016m12
2016m2
2016m3
2016m4
2016m5
2016m6
2016m7
2016m8
2016m9

Я хочу расположить эту таблицу, как в таблице ниже.

T
-----
2016m1
2016m2
2016m3
2016m4
2016m5
2016m6
2016m7
2016m8
2016m9
2016m10
2016m11
2016m12

Так кто-нибудь может мне помочь?

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Или используя base-R, где ваш вектор данных равен T :

T[order(sapply(T, function(l) as.integer(substr(l, 6, nchar(l)+1))))]
0 голосов
/ 08 сентября 2018

Использование regex с gsub выглядит примерно так:

Предполагая, что T является data.frame

last_digits <- as.numeric(gsub("[0-9]{4}m","",T[,1]))
T[order(last_digits),] #Ordered dataframe

Regex объяснение

[0-9]{4}m Ищет ровно 4 цифры, если вы хотите использовать диапазон чисел, который вы можете использовать {num_1-num_2}, после нахождения "правила" он будет искать букву m.

0 голосов
/ 07 сентября 2018

С mixedsort от gtools:

library(gtools)
df$T <- mixedsort(df$T)

или mixedorder:

df$T <- df$T[mixedorder(df$T)]

Выход:

         T
1   2016m1
2   2016m2
3   2016m3
4   2016m4
5   2016m5
6   2016m6
7   2016m7
8   2016m8
9   2016m9
10 2016m10
11 2016m11
12 2016m12

Данные:

df <- structure(list(T = c("2016m1", "2016m10", "2016m11", "2016m12", 
"2016m2", "2016m3", "2016m4", "2016m5", "2016m6", "2016m7", "2016m8", 
"2016m9")), .Names = "T", class = "data.frame", row.names = c(NA, 
-12L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...