Kapitel 39 Werte in mehreren Variablen ersetzen

Oft enthalten Datensätze Zahlen oder Zeichen, die etwas spezielles bedeuten und die wir ersetzen müssen. So wird manchmal die 999 benutzt, um einen fehlenden Wert anzugeben.

Manchmal wollen wir auch einfach bestmmte Werte ersetzen

39.0.1 Wir benötigen folgende Pakete

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

Wollen wir einen Wert im ganzen Datenset ersetzen, ist dies ziemlich einfach. Erfinden wir zuerst ein paar Daten.

set.seed(666)
samplesize=100
id<-1:samplesize
pain<-sample(c(0:10,999), size=samplesize, rep=TRUE)
depression<-sample(c(0:10,999), size=samplesize, rep=TRUE)
data<-data.frame(id, samplesize, pain, depression)

data<-data %>% 
  arrange(desc(pain), desc(depression))
head(data)
##   id samplesize pain depression
## 1 60        100  999        999
## 2 29        100  999         10
## 3  3        100  999          8
## 4 11        100  999          8
## 5 90        100  999          8
## 6 79        100  999          6

Wenn wir im gesamten Datensatz die 999 ersetzen möchten, ist dies sehr einfach. Der folgende Befehl wird in jeder Variable alle Werte 999 mit NA ersetzen.

data[data=="999"]<-NA
head(data)
##   id samplesize pain depression
## 1 60        100   NA         NA
## 2 29        100   NA         10
## 3  3        100   NA          8
## 4 11        100   NA          8
## 5 90        100   NA          8
## 6 79        100   NA          6

Wenn wir nur in einer Variable Werte ersetzen möchten, geht dies auch. Der folgende Befehl erstzt die 9 in der Variable depression mit NA.

data$depression[data$depression==9]<-NA
head(data)
##   id samplesize pain depression
## 1 60        100   NA         NA
## 2 29        100   NA         10
## 3  3        100   NA          8
## 4 11        100   NA          8
## 5 90        100   NA          8
## 6 79        100   NA          6

Wenn wir nun über mehrere Variablen Werte ersetzen wollen, können wir dies zum Beispiel wie folgt erledigen:

arrange(data,desc(pain), desc(depression))
##      id samplesize pain depression
## 1     1        100   10         10
## 2    23        100   10          8
## 3     2        100   10          6
## 4    95        100   10          5
## 5    96        100   10          5
## 6    94        100   10          1
## 7    73        100   10          0
## 8    30        100   10         NA
## 9    25        100    9         10
## 10   55        100    9          8
## 11   63        100    9          7
## 12   18        100    9          5
## 13   50        100    9          5
## 14   64        100    9          2
## 15   80        100    9          0
## 16   36        100    9         NA
## 17    5        100    8          7
## 18   68        100    8          2
## 19   21        100    8          1
## 20   57        100    8          0
## 21   43        100    8         NA
## 22   70        100    8         NA
## 23   75        100    8         NA
## 24   20        100    7          8
## 25   24        100    7          7
## 26   26        100    7          6
## 27   71        100    7          4
## 28   98        100    7          3
## 29   34        100    7          2
## 30   14        100    7         NA
## 31   56        100    7         NA
## 32   15        100    6         10
## 33   45        100    6          3
## 34   77        100    6          2
## 35   27        100    6         NA
## 36   62        100    6         NA
## 37   51        100    6         NA
## 38   61        100    6         NA
## 39   69        100    5         10
## 40   58        100    5          8
## 41   92        100    5          7
## 42   13        100    5          5
## 43   40        100    5          3
## 44   19        100    5         NA
## 45  100        100    5         NA
## 46   99        100    4          8
## 47    4        100    4          5
## 48   37        100    4          5
## 49   81        100    4          4
## 50   85        100    4          4
## 51   10        100    4          3
## 52   89        100    4         NA
## 53   67        100    3         10
## 54   31        100    3          8
## 55   76        100    3          8
## 56   78        100    3          7
## 57   44        100    3          5
## 58   22        100    3          4
## 59   33        100    3          3
## 60   65        100    3          2
## 61   39        100    3          0
## 62   32        100    3         NA
## 63   86        100    3         NA
## 64   52        100    2          8
## 65    9        100    2          5
## 66   49        100    2          5
## 67   72        100    2          5
## 68   83        100    2          4
## 69   66        100    2          3
## 70   91        100    2          2
## 71   12        100    2          1
## 72   38        100    2          1
## 73   87        100    2          1
## 74   84        100    2         NA
## 75   35        100    2         NA
## 76   42        100    2         NA
## 77    8        100    1          8
## 78   46        100    1          6
## 79   97        100    1          6
## 80   28        100    1          4
## 81   93        100    1          4
## 82   47        100    1          3
## 83   16        100    1          1
## 84   74        100    1         NA
## 85   53        100    1         NA
## 86   54        100    0          3
## 87   59        100    0          3
## 88   17        100    0          2
## 89    7        100    0          0
## 90   88        100    0         NA
## 91   29        100   NA         10
## 92    3        100   NA          8
## 93   11        100   NA          8
## 94   90        100   NA          8
## 95   79        100   NA          6
## 96    6        100   NA          4
## 97   41        100   NA          4
## 98   48        100   NA          3
## 99   82        100   NA          1
## 100  60        100   NA         NA
head(data)
##   id samplesize pain depression
## 1 60        100   NA         NA
## 2 29        100   NA         10
## 3  3        100   NA          8
## 4 11        100   NA          8
## 5 90        100   NA          8
## 6 79        100   NA          6
data<-data %>% 
  mutate(across(c(pain, depression), ~replace(., . ==8, NA))) 

head(data)
##   id samplesize pain depression
## 1 60        100   NA         NA
## 2 29        100   NA         10
## 3  3        100   NA         NA
## 4 11        100   NA         NA
## 5 90        100   NA         NA
## 6 79        100   NA          6

39.0.2 Folgende Pakete benötigen wir:

library(dplyr)
library(tidyr)