首页 > 解决方案 > R函数替换给定范围内的值

问题描述

我有一个从 1 到 5 的李克特量表,但在我的调查数据库中,我错误地将答案标记为 A1:A5。

`> dput(head(sample))
structure(list(ESIR_SQ001 = c(NA, "A4", 
"A4", "A3", "A3", NA), 
 ESIR_SQ002 = c(NA, "A2", "A4", "A3", "A4", 
 NA), ESIR_SQ003 = c(NA, 
 "A2", "A2", "A2", "A2", NA), ESIR_SQ004 = 
 c(NA, "A1", "A2", 
 "A3", "A1", NA)), class = c("tbl_df", 
 "tbl", "data.frame"
  ), row.names = c(NA, -6L))`

我有几个规模和数千名参与者,所以我想知道是否有一种方法可以替换我的数据框的一系列变量的值:

ex from col 1:5 (A1=1, A2=2, A3=3, A4=4, A5=5)

标签: rdataframereplace

解决方案


你实际上可以很容易地做到这一点gsub

dat[1:4] <- lapply(dat[1:4], gsub, pattern="A", replacement="")
str(dat)
#   ESIR_SQ001 ESIR_SQ002 ESIR_SQ003 ESIR_SQ004
# 1       <NA>       <NA>       <NA>       <NA>
# 2          4          2          2          1
# 3          4          4          2          2
# 4          3          3          2          3
# 5          3          4          2          1
# 6       <NA>       <NA>       <NA>       <NA>

您还可以预先定义一个替换函数,该函数同时转换为您可能需要的数字。

gsub.num <- function(x) as.double(gsub("A", "", x))
dat[1:4] <- lapply(dat[1:4], gsub.num)
dat
# Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 6 obs. of  4 variables:
#  $ ESIR_SQ001: num  NA 4 4 3 3 NA
#  $ ESIR_SQ002: num  NA 2 4 3 4 NA
#  $ ESIR_SQ003: num  NA 2 2 2 2 NA
#  $ ESIR_SQ004: num  NA 1 2 3 1 NA

推荐阅读