Удобный код для чередования данных - PullRequest
0 голосов
/ 17 октября 2018

У меня есть фрейм данных чисел в 10 с от 0 до 100. Я хотел бы получить некоторый краткий код для изменения каждого значения на ранг, то есть 100 становится 1, 90 становится 2 .... и 0 становится 11.

Есть хороший способ кодирования этого?Вот мой код:

df[df == 100] = 1
df[df == 90] = 2
...
df[df == 10] = 10
df[df == 0] = 11

Ответы [ 3 ]

0 голосов
/ 17 октября 2018

Использование plyr:

require(plyr)
# It maps values from -> to
mapvalues(a,from = (seq(0,100,10)), to = 11:1) 

ИЛИ

Использование rank (Это применимо только в том случае, если числа различны):

a= seq(0,100,10)
[1]   0  10  20  30  40  50  60  70  80  90 100

Код:

rank(-a)

Выход:

 [1] 11 10  9  8  7  6  5  4  3  2  1
0 голосов
/ 17 октября 2018

Если все столбцы dataframe являются числами, преобразуйте их в matrix .Затем мы можем сделать следующее:

# example data
set.seed(1); x <- matrix(sample(seq(0, 100, 10), 20, replace = TRUE), ncol = 5)
x
#      [,1] [,2] [,3] [,4] [,5]
# [1,]   20   20   60   70   70
# [2,]   40   90    0   40  100
# [3,]   60  100   20   80   40
# [4,]   90   70   10   50   80

# then convert:
11 - x %/% 10
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    9    9    5    4    4
# [2,]    7    2   11    7    1
# [3,]    5    1    9    3    7
# [4,]    2    4   10    6    3

Примечание: Это решение работает и для dataframe , если все столбцы имеют класс числовой.Матрица предпочтительнее, чем датафрейм , когда классы столбцов одного и того же класса.

0 голосов
/ 17 октября 2018

Попробуйте что-то вроде этого

df <- seq(from = 0, to = 100, by = 10)
rank(-df)
[1] 11 10  9  8  7  6  5  4  3  2  1
...