r - 更改数据框中变量的值:≥16 为“1”,<16 为“0”?
问题描述
如果我有一个data
带有变量的数据框CESD
,我想将 ≥ 16 的值更改CESD
为“1”,将 < 16 更改为“0”(注意:这个向量中有 NA,我希望忽略它们),什么 R 函数我可以用吗?
我mutate()
在 dplyr 包中尝试过,但它不起作用
library(tidyverse)
data = data %>%
mutate(CESD = recode(CESD, `1` = CESD[CESD >= 16 & !is.na(CESD)], `0` = CESD[CESD < 16 & !is.na(CESD)]))
R 中的消息返回:mutate_impl(.data, dots) 中的错误:评估错误:向量 1 的长度必须为 419 或 1,而不是 88。
解决方案
我们这里不需要recode
。只需使用 . 将逻辑表达式转换为二进制即可as.integer
。TRUE 值更改为 1,其他值更改为 0,而NA
原始数据中的元素保持不变。
data %>%
mutate(CESD = (CESD >= 16 & !is.na(CESD)) * NA^(is.na(CESD)))
或仅使用base R
data$CESD <- with(data, (CESD >= 16 & !is.na(CESD)) * NA^(is.na(CESD))))
或者我们为元素创建一个逻辑表达式NA
并只为非 NA 元素更新
i1 <- !is.na(data$CESD)
data$CESD[i1] <- as.integer(data$CESD[i1] >= 16)
可以更紧凑地写成data.table
library(data.table)
setDT(data)[!is.na(CESD), CESD := as.integer(CESD >= 16)]
注意:如果值需要character
分类,请用as.character
数据
set.seed(24)
data <- data.frame(CESD = sample(c(NA, 1:5, 15:20), 50, replace = TRUE),
col2 = rnorm(50))
推荐阅读
- pdf - 如何在 FOP Apache 生成的 PDF 中显示表情符号
- javascript - 一个盒子上出现 ECONNREFUSED 错误,但另一个盒子上没有
- linux - 使用 wget 从 linux 终端下载 NC 格式的气候数据
- unity3d - Unity设置变换父级而不改变玩家的比例
- javascript - 如何在 html 文件之间切换并在它们之间发送数据?
- python - MNIST 数据集输入数组应具有与目标数组相同数量的样本
- mysql - 如何在 Visual Basic 中获取插入到 mysql 数据库中的记录的 ID?
- grep - 获取路径与基本名称模式匹配的文件名
- python - 如何在 Python 3 中从字符串中提取子字符串
- c++ - 更好地编写程序