用于更改数据框的便捷代码

Conventient code for alterning a dataframe

我有一个从 0 到 100 的 10s 数字数据框。我想要一些简洁的代码来将每个值更改为等级,即 100 变为 1,90 变为 2.... 0 变为 11。

有没有好的编码方式?这是我的代码:

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

尝试这样的事情

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

使用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

如果所有 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,只要所有列都是 class of [=15] =]数字。当 class 列的 class.

相同时,矩阵优于 dataframe