r - 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)
解决方案
你实际上可以很容易地做到这一点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
推荐阅读
- python - 如何从 github 安装 deepplantphenomics python 包?
- java - E/RecyclerView:没有附加适配器;跳过布局 Android Studio RecyclerView
- python - boto3 AWS Batch在`.describe_jobs()`响应中缺少`logStreamName`
- java - GUI 问题 Java Netbeans 将 TextFields 与数字相关联
- python - 如何计算对比度改善指数 (CII)
- android - Playstore:停用此 APK 将导致您的应用可用于在更少类型的设备上进行新安装
- macos - 错误:没有名称为“chromedriver”的可用公式
- firebase - 带有firestore的Stream提供程序在flutter中出现问题
- c++ - 如何从 C++ 中过度分配的内存部分获取数组的大小
- typescript - 如何检查表单控件是否在反应式表单中被禁用