【问题标题】:R replace variable valuesR替换变量值
【发布时间】:2020-05-04 12:14:48
【问题描述】:

我尝试从 carData 包中更改 WVS 数据集中的变量值,但出现错误:

Error in `$<-.data.frame`(`*tmp*`, religion, value = c(2L, 2L, 2L, 2L,  : 
  replacement has 5383 rows, data has 5381
In addition: Warning message:
In `[<-.factor`(`*tmp*`, c("yes", "no"), value = c(2L, 2L, 2L, 2L,  :
  invalid factor level, NA generated

宗教是可变因素,它应该仍然是因素。

这是我的代码

data(WVS) 
head(WVS)
WVS$religion[c("yes","no")] <- c("oui", "non")

【问题讨论】:

    标签: r variables replace


    【解决方案1】:

    您可以使用dplyr

    library(dplyr)
    WVS  <- WVS %>% mutate(religion = if_else("yes","oui","non"))
    

    如果你的变量可以有更多你不想搞砸的选项,你可以使用case_when

    WVS  <- WVS %>%
       mutate(religion = case_when(religion == "yes" ~ "oui",
                                   religion == "no" ~ "non",
                                   TRUE ~ religion))
    

    编辑

    您可以将recode 与因子变量一起使用

    WVS  <- WVS %>%
       mutate(religion = recode(religion, 
                                yes = "oui",
                                no = "non"))
    

    【讨论】:

    • WVS$religion 肯定只有“yes”和“no”值吗?因为否则你会覆盖其中的一些。 if else 做嵌套更安全,不是吗?
    • 我从这个例子中猜到了。否则,是的,做不同的事情会更安全,我提出了一个case_when 解决方案,但如果其他可以完成这项工作,则嵌套
    • 如果宗教是可变因素而我希望它仍然是因素怎么办? case_when 不起作用。
    • 对于因子变量,使用recode。如果您对解决方案感到满意,可以接受see guidelines there if needed
    猜你喜欢
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多