0

I am trying to change portions of my data frame in multiple variables from 8 and 9 to NA

Also, does anyone know a quick way to reverse code a vector? (likert scale where 1 is strongly agree, I want the most weight to be at 5)

Any help would be appreciated. Cheers.

naniar::replace_with_na_all(data = amer, condition = ~.x == -8)

data %>% mutate_all(.funs = function(x) replace(var, which(var == -9 | var == -8), NA))

df %>% mutate_each(funs(replace(., .>7, NA))

dep. evidently

NelsonGon
  • 13,015
  • 7
  • 27
  • 57
  • Please make your question [reproducible](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). Where is `replace_with_na_all` from? You also have more than one question although both should be duplicates. – NelsonGon May 11 '19 at 04:49
  • 1
    I appreciate that. I am a novice and need to learn the etiquette, conventions, etc. I was hoping it would be an easy spot and fix. – Mark Carroll May 11 '19 at 04:55

1 Answers1

1

Please see the comment to understand how to make your question reproducible for future posts. It's always a good idea to include sample data; if you can't share your data, provide code to generate representative mock data or use one of the built-in datasets.

As to your question, you can use mutate_all in the following way

library(dplyr)
data %>% mutate_all(~ifelse(.x %in% c(-8, -9), NA, .x))

Or you can use replace

data %>% mutate_all(~replace(.x, which(.x %in% c(-8, -9)), NA))

Reproducible example

Let's take mtcars as sample data. To replace all 3 and 4 entries across all columns with NA we can do

mtcars %>% mutate_all(~ifelse(.x %in% c(3, 4), NA, .x))
#    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#1  21.0   6 160.0 110 3.90 2.620 16.46  0  1   NA   NA
#2  21.0   6 160.0 110 3.90 2.875 17.02  0  1   NA   NA
#3  22.8  NA 108.0  93 3.85 2.320 18.61  1  1   NA    1
#4  21.4   6 258.0 110 3.08 3.215 19.44  1  0   NA    1
#5  18.7   8 360.0 175 3.15 3.440 17.02  0  0   NA    2
#6  18.1   6 225.0 105 2.76 3.460 20.22  1  0   NA    1
#7  14.3   8 360.0 245 3.21 3.570 15.84  0  0   NA   NA
#8  24.4  NA 146.7  62 3.69 3.190 20.00  1  0   NA    2
#9  22.8  NA 140.8  95 3.92 3.150 22.90  1  0   NA    2
#10 19.2   6 167.6 123 3.92 3.440 18.30  1  0   NA   NA
#11 17.8   6 167.6 123 3.92 3.440 18.90  1  0   NA   NA
#12 16.4   8 275.8 180 3.07 4.070 17.40  0  0   NA   NA
#13 17.3   8 275.8 180 3.07 3.730 17.60  0  0   NA   NA
#14 15.2   8 275.8 180 3.07 3.780 18.00  0  0   NA   NA
#15 10.4   8 472.0 205 2.93 5.250 17.98  0  0   NA   NA
#16 10.4   8 460.0 215   NA 5.424 17.82  0  0   NA   NA
#17 14.7   8 440.0 230 3.23 5.345 17.42  0  0   NA   NA
#18 32.4  NA  78.7  66 4.08 2.200 19.47  1  1   NA    1
#19 30.4  NA  75.7  52 4.93 1.615 18.52  1  1   NA    2
#20 33.9  NA  71.1  65 4.22 1.835 19.90  1  1   NA    1
#21 21.5  NA 120.1  97 3.70 2.465 20.01  1  0   NA    1
#22 15.5   8 318.0 150 2.76 3.520 16.87  0  0   NA    2
#23 15.2   8 304.0 150 3.15 3.435 17.30  0  0   NA    2
#24 13.3   8 350.0 245 3.73 3.840 15.41  0  0   NA   NA
#25 19.2   8 400.0 175 3.08 3.845 17.05  0  0   NA    2
#26 27.3  NA  79.0  66 4.08 1.935 18.90  1  1   NA    1
#27 26.0  NA 120.3  91 4.43 2.140 16.70  0  1    5    2
#28 30.4  NA  95.1 113 3.77 1.513 16.90  1  1    5    2
#29 15.8   8 351.0 264 4.22 3.170 14.50  0  1    5   NA
#30 19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
#31 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
#32 21.4  NA 121.0 109 4.11 2.780 18.60  1  1   NA    2

Using replace as

mtcars %>% mutate_all(~replace(.x, which(.x %in% c(3, 4)), NA))

gives the same result.

Maurits Evers
  • 49,617
  • 4
  • 47
  • 68
  • Unfortunately this did not work, but thanks! – Mark Carroll May 11 '19 at 04:54
  • @MarkCarroll This *does* work (see my reproducible example); that's why it is so important for you to provide sample data! The devil is often in the detail. Without knowing anything about your data it is very difficult (impossible) to provide specific help! – Maurits Evers May 11 '19 at 04:55
  • Indeed. Great point. Do people usually attach csv or similar on this forum or just a printout? – Mark Carroll May 11 '19 at 05:00
  • Basically, I have 45 variables with likert scales, among other categorical vars that will be treated as continuous scales, but with 8 = I do not know, and 9 = Not applicable. – Mark Carroll May 11 '19 at 05:03
  • @MarkCarroll Best to edit your post and include the output of `dput`. See the details following the link that NelsonGon gave in his first comment. The key is to provide *representative* and *minimal* sample data. Representative in that it should reflect the idiosyncratic structure/format of your data, and minimal in that you shouldn't try to post a 45 by 10 million row dataset. – Maurits Evers May 11 '19 at 05:03
  • Alternatively take a look at my example, and then try to apply the solution to your actual data. As I said earlier, this definitely works in that it will replace values (in the example, any `3`s and `4`s) across *all* columns of a `data.frame`. – Maurits Evers May 11 '19 at 05:07
  • 1
    Yeah! The ifelse worked. Thanks so much! – Mark Carroll May 11 '19 at 05:09