在R中重新编码数值

时间:2014-06-03 09:40:16

标签: r numeric recode

我想将一些数值重新编码为不同的数值,并使用以下代码进行操作:

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

我收到以下错误:

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

我哪里错了?

3 个答案:

答案 0 :(得分:5)

我们可以使用recode上的case_whendplyr 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

答案 1 :(得分:2)

此功能不适用于数字矢量。如果您想使用它,您可以执行以下操作:

 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

答案 2 :(得分:1)

试试这个:

#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
相关问题