如何在R语言的数据框中基于其他属性修改单个值?——乌拉圭2016-2018年abort哑变量修改失败求助
解决R中修改数据框变量未生效的问题
我来帮你搞定这个头疼的问题!你试了四种方法都没报错,但数据里的abort变量纹丝不动,这种情况在R里其实挺常见的,主要是几个容易踩的小坑,咱们一步步拆解:
先分析你之前尝试的问题
1. 行号修改法(Try1、Try3、Try4)
你直接指定行号修改,但可能存在两个问题:
- 行号记错了:你以为的14696/14698不一定是乌拉圭2016-2018年的行!可以先运行这个代码确认实际行号:
which(d$Country == "Uruguay" & d$Year %in% 2016:2018) - 数据框类型限制:如果你的
d是tibble(而不是传统的data.frame),直接用d[行号, 列名] = 1的修改方式可能不会同步到原数据框?不过更可能是行号不对。
2. 浮点数比较法(Try2)
这个是最容易踩的坑:永远不要用==直接比较浮点数!
计算机存储浮点数时会有精度误差,比如你写的7.826785,实际在数据里可能是7.826784999999999,这时候d$drap == 7.826785根本匹配不到任何行,自然不会修改abort的值。
最稳妥的解决方案:用明确条件定位
直接通过Country和Year来定位要修改的行,这是最可靠的方法,完全避开行号和浮点数的坑:
# 把乌拉圭2016-2018年的abort变量设为1 d$abort[d$Country == "Uruguay" & d$Year %in% 2016:2018] <- 1
如果习惯用dplyr的管道语法,也可以这么写(更清晰):
library(dplyr) d <- d %>% mutate(abort = ifelse(Country == "Uruguay" & Year %in% 2016:2018, 1, abort))
验证修改是否成功
运行下面的代码检查结果:
# 提取乌拉圭2016-2018的数据查看 subset(d, Country == "Uruguay" & Year %in% 2016:2018)
这样修改后,你应该就能看到abort列已经变成1了!
内容的提问来源于stack exchange,提问作者Nora Elvestad
相关产品推荐
相关产品推荐

