r - `$<-.data.frame ..... 替换有 X 行,数据有 Y
问题描述
作为项目的一部分,我得到了一个用于 analasys 的医疗数据框。作为 analasys 的一部分,我不得不修复名为“Gender”的变量,因为读取数据会产生错误:
datS$Gender <- ifelse(datS$Gender == "¦ֳ«ֳ","Male", ifelse(datS$Gender == "°ֳ·ֳ¡ֳ₪","Female", datS$Gender))
但是,这样做会将变量的值更改为:
1 2 3
4461 3373 479
虽然这些数字是正确的,但他们的标签却不是。我试图使用替换功能来解决这个问题:
datS$Gender <- replace(datS$Gender, c("1","2", "3"), c("Male", "Female", "censored"))
但是,这样做会导致以下错误消息:
Error in `$<-.data.frame`(`*tmp*`, Gender2, value = c("3", "3", "3", "3", :
replacement has 8316 rows, data has 8313
正确的观察次数是 8313,我不知道是什么导致了错误。您能否解释一下为什么会发生此错误?提前谢谢了!
解决方案
尝试一种dplyr
替换奇怪值的方法:
library(dplyr)
dat %>%
dplyr::mutate(
FixedGender = dplyr::case_when(Gender == "¦ֳ«ֳ" ~ "Male",
Gender == "°ֳ·ֳ¡ֳ₪" ~ "Female",
TRUE ~ as.character(Gender))) %>%
select(Gender, FixedGender) # This line is just to compare the two side-by-side
推荐阅读
- angular - ionic3 通过 `radio` 更改页面数据
- c# - 将事件设置为数组c#中的对象
- python - 句子含义相似度和频率
- hyperledger-fabric - 为什么 Hyperledger Fabric 通过编译源代码而不是二进制来安装链代码?
- node.js - React 中的模态不工作。显示错误
- socket.io - Angular 聊天应用程序分发(服务器应用程序)到服务器
- javascript - 将对象数据传递给引导模式
- javascript - 如何在日期选择器中开始年份范围?
- redis - 用于开发环境的 Redis 设置
- sql - 计算历史平均值并检查当前值是否大于 3 的 SQL 查询