用于更改数据框的便捷代码
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
我有一个从 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