Как мне перевернуть числовые данные в R? - PullRequest
2 голосов
/ 28 февраля 2020

Я начинающий R, но до сих пор смог найти ответы на мои вопросы, прибегая к помощи. После нескольких дней поиска я все еще не могу понять это все же.

У меня есть набор данных с результатами когнитивного теста. Большинство тестов оцениваются так, чтобы более высокие оценки были лучше. ОДИН тест оценивается противоположным образом, поэтому более низкие оценки лучше (время выполнения задания). Я хочу объединить три теста (таким образом, значения из трех столбцов в моем фрейме данных), но сначала мне нужно перевернуть значения этого одного теста.

Под флипом я подразумеваю, что мое самое низкое значение (т.е. самое быстрое время завершения и лучший результат) вместо этого получает самое высокое значение, а самое высокое значение (то есть самое медленное время завершения и худший результат) получает самое низкое значение. Мои данные числовые.

Я пробовал функцию dens_rank (), а также функцию rev (). dens_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

Я уверен, что упустил простое решение этой проблемы, заранее благодарю всех, кто может помочь или направит меня в правильном направлении.

Бест, Мария

1 Ответ

4 голосов
/ 28 февраля 2020

Вы можете вычесть ваши значения из максимального значения, а затем добавить минимальное значение. Например:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...