首页 > 解决方案 > `$<-.data.frame ..... 替换有 X 行,数据有 Y

问题描述

作为项目的一部分,我得到了一个用于 analasys 的医疗数据框。作为 analasys 的一部分,我不得不修复名为“Gender”的变量,因为读取数据会产生错误:

datS$Gender <- ifelse(datS$Gender == "¦ֳ«ֳ","Male", ifelse(datS$Gender == "°ֳ·ֳ¡ֳ₪&quot;,"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,我不知道是什么导致了错误。您能否解释一下为什么会发生此错误?提前谢谢了!

标签: rreplace

解决方案


尝试一种dplyr替换奇怪值的方法:

library(dplyr)

dat %>%
    dplyr::mutate(
        FixedGender = dplyr::case_when(Gender == "¦ֳ«ֳ" ~ "Male",
                                       Gender == "°ֳ·ֳ¡ֳ₪&quot; ~ "Female",
                                       TRUE ~ as.character(Gender))) %>%
    select(Gender, FixedGender) # This line is just to compare the two side-by-side

推荐阅读