首页 > 解决方案 > 如何在 R 中翻转数值数据?

问题描述

我是一个 R 初学者,但到目前为止,我已经能够通过谷歌搜索找到我的问题的答案。经过几天的搜索,我仍然无法弄清楚这一点。

我有一个包含认知测试结果的数据集。大多数测试都有评分,因此分数越高越好。ONE 测试以相反的方式计分,因此分数越低越好(任务的完成时间)。我想组合三个测试(所以我的数据框中三列的值),但首先我需要翻转这个测试的值。

翻转是指我的最低值(即最快完成时间和最佳分数)反而获得最高值,而最高值(即最慢完成时间和最差分数)获得最低值。我的数据是数字的。

我已经尝试过 dense_rank() 函数以及 rev() 函数。dense_rank() 返回一个向量,其中对值进行了排名,但不保留值的分布,并且 rev() 仅反转向量中值的顺序,它不会更改值本身。

示例代码:

> (.packages())
 [1] "readxl"       "rethinking"   "parallel"     "rstan"        "StanHeaders"  "uwIntroStats"
 [7] "ggplot2"      "dplyr"        "quantreg"     "SparseM"      "foreign"      "aod"         
[13] "stats"        "graphics"     "grDevices"    "utils"        "datasets"     "methods"     
[19] "base"

> testresults <- seq(from = 12, to = 120, by = 2)
> 
> testresults
 [1]  12  14  16  18  20  22  24  26  28  30  32  34  36  38  40  42  44  46  48  50  52  54  56  58
[25]  60  62  64  66  68  70  72  74  76  78  80  82  84  86  88  90  92  94  96  98 100 102 104 106
[49] 108 110 112 114 116 118 120
> test.frame <- data.frame(testresults, rev(testresults), rank(testresults))
> test.frame
   testresults rev.testresults. rank.testresults.
1           12              120                 1
2           14              118                 2
3           16              116                 3
4           18              114                 4
5           20              112                 5
6           22              110                 6
7           24              108                 7
8           26              106                 8
9           28              104                 9
10          30              102                10
11          32              100                11
12          34               98                12
13          36               96                13
14          38               94                14
15          40               92                15
16          42               90                16
17          44               88                17
18          46               86                18
19          48               84                19
20          50               82                20
21          52               80                21
22          54               78                22
23          56               76                23
24          58               74                24
25          60               72                25
26          62               70                26
27          64               68                27
28          66               66                28
29          68               64                29
30          70               62                30
31          72               60                31
32          74               58                32
33          76               56                33
34          78               54                34
35          80               52                35
36          82               50                36
37          84               48                37
38          86               46                38
39          88               44                39
40          90               42                40
41          92               40                41
42          94               38                42
43          96               36                43
44          98               34                44
45         100               32                45
46         102               30                46
47         104               28                47
48         106               26                48
49         108               24                49
50         110               22                50
51         112               20                51
52         114               18                52
53         116               16                53
54         118               14                54
55         120               12                55

我确信我忽略了这个问题的简单解决方案,提前感谢任何可以帮助或指出正确方向的人。

最好的,玛丽亚

标签: r

解决方案


您可以从最大值中减去您的值,然后添加最小值。例如:

x <- seq(1, 5, by = .4)
x
[1] 1.0 1.4 1.8 2.2 2.6 3.0 3.4 3.8 4.2 4.6 5.0

(max(x) - x) + min(x)

[1] 5.0 4.6 4.2 3.8 3.4 3.0 2.6 2.2 1.8 1.4 1.0

推荐阅读