7

I want to recode some numeric values into different numeric values and have had a go using the following code:

survey$KY27PHYc <- revalue(survey$KY27PHY1, c(5=3, 4=2,3=2,2=1,1=1))

I get the following error:

## Error: unexpected '=' in "survey$KY27PHYc <- revalue(survey$KY27PHY1, c(5="

Where am I going wrong?

smci
  • 32,567
  • 20
  • 113
  • 146
Ash
  • 237
  • 2
  • 6
  • 16
  • 2
    Are you using `plyr` for this? You probably should mention it – David Arenburg Jun 03 '14 at 09:44
  • Ooops no not sure how that got in there. Mistake when copying and pasting. – Ash Jun 03 '14 at 09:56
  • Ash, please tell us ***which*** 'revalue()' you're referring to! Use `search()` or ?revalue to figure that out. (I briefly tagged it dplyr on the assumption it was.) – smci Jun 03 '14 at 17:14
  • You could also try to `merge` with a data frame containing both old and new values: `merge(survey, data.frame(KY27PHY1 = c(5,4,3,5,1), KY27PHY1_new = c(3,2,2,1,1)))`. – Paul Rougieux Jul 15 '15 at 11:46

3 Answers3

16

We can recode numeric values by using recode or case_when on dplyr 0.7.0.

library(dplyr)
packageVersion("dplyr")
# [1] ‘0.7.0’

x <- 1:10

# With recode function using backquotes as arguments
dplyr::recode(x, `2` = 20L, `4` = 40L)
# [1]  1 20  3 40  5  6  7  8  9 10

# Note: it is necessary to add "L" a numerical value.
dplyr::recode(x, `2` = 20, `4` = 40)
# [1] NA 20 NA 40 NA NA NA NA NA NA
# Warning message:
# Unreplaced values treated as NA as .x is not compatible. Please specify replacements exhaustively or supply .default

# With recode function using characters as arguments
as.numeric(dplyr::recode(as.character(x), "2" = "20", "4" = "40"))
# [1]  1 20  3 40  5  6  7  8  9 10

# With case_when function
dplyr::case_when(
  x %in% 2 ~ 20,
  x %in% 4 ~ 40,
  TRUE ~ as.numeric(x)
)
#  [1]  1 20  3 40  5  6  7  8  9 10
Keiku
  • 8,205
  • 4
  • 41
  • 44
8

This function does not work on numeric vector. If you want to use it, you can do as follows:

 x <- 1:10 # your numeric vector

 as.numeric(revalue(as.character(x), c("2" = "33", "4" = "88")))

 # [1]  1 33  3 88  5  6  7  8  9 10
Davide Passaretti
  • 2,741
  • 1
  • 21
  • 32
2

Try this:

#sample data
set.seed(123); x <- sample(1:5, size = 10, replace = TRUE)

x
# [1] 2 4 3 5 5 1 3 5 3 3

#recode
x <- c(1, 1, 2, 2, 3)[ x ]

x
# [1] 1 2 2 3 3 1 2 3 2 2
zx8754
  • 52,746
  • 12
  • 114
  • 209