我试图连续三年改变一个国家的虚拟变量的值。 我尝试执行以下操作 尝试 1;
d[14696, "abort"] = 1
尝试 2:
d$abort <- ifelse(d$drap == 7.826785, 1, d$abort)
d$abort <- ifelse(d$drap == 8.263874, 1, d$abort)
d$abort <- ifelse(d$drap == 12.060453, 1, d$abort)
尝试 3:
d[14698, 6] = 1
尝试 4:
d$abort[14698] <- 1
*数字 14698 是行号
它们都没有给出任何错误,这让我认为它们可以工作。但是,数据集中没有任何变化。有人可以帮忙吗?
这是乌拉圭数据框的样子,需要在变量 abort 上编辑 2016-2019 年:
年 | 国家 | 失业 | 贫穷 | GDPpc | 中止 | 悬垂 |
---|---|---|---|---|---|---|
2012 | 乌拉圭 | 8.8379 | 0.2 | 12463 | o | 6.425273 |
2013 | 乌拉圭 | 8.3742 | 0.2 | 10849 | 1 | 5.426374 |
2014 | 乌拉圭 | 8.1894 | 0.2 | 12938 | 1 | 6.738383 |
2015 | 乌拉圭 | 8.2349 | 0.3 | 11823 | 1 | 7.377327 |
2016 | 乌拉圭 | 9.2369 | 0.3 | 10828 | o | 7.826785 |
2017 | 乌拉圭 | 9.6273 | 0.4 | 10748 | o | 8.263874 |
2018 | 乌拉圭 | 8.2374 | 0.3 | 11038 | o | 12.060453 |
答案 0 :(得分:1)
下面是一个 tidyverse 选项,它基于 drap
是 double 类型并且 x.
实际上是 NA
的假设。
library(dplyr)
mutate(df, Abort = if_else(!is.na(drap), 1, Abort))
## A tibble: 7 x 4
# Year Country Abort drap
# <dbl> <chr> <dbl> <dbl>
# 1 2012 Uruguay 0 NA
# 2 2013 Uruguay 1 NA
# 3 2014 Uruguay 1 NA
# 4 2015 Uruguay 1 NA
# 5 2016 Uruguay 1 7.83
# 6 2017 Uruguay 1 8.26
# 7 2018 Uruguay 1 12.1
数据
df <- structure(list(Year = c(2012, 2013, 2014, 2015, 2016, 2017, 2018
), Country = c("Uruguay", "Uruguay", "Uruguay", "Uruguay", "Uruguay",
"Uruguay", "Uruguay"), Abort = c(0, 1, 1, 1, 0, 0, 0), drap = c(NA,
NA, NA, NA, 7.826785, 8.263874, 12.060453)), row.names = c(NA,
-7L), class = c("tbl_df", "tbl", "data.frame"))
答案 1 :(得分:0)
添加到 rjen 的答案(同时也使用他/她的数据框 df )我建议您可以使用 dplyr::case_when,这样
library(dplyr)
df %>% mutate(Abort =
case_when(drap %in% c(7.826785, 8.263874, 12.060453) ~ 1 ## if true
,TRUE ~ Abort) ## if false condition
)
在这里,如果 drap 取某个值(类似于您的第二种方法)Abort 变为 1。否则 Abort 保持不变。它可能比常规 ifelse 条件更有用,因为您可以将更多条件连接在一起。您还可以添加类似
case_when(drap %in% c(7.826785, 8.263874, 12.060453) & Year == 2013 ~ 1
答案 2 :(得分:0)
我在教授的帮助下发现我必须以不同的方式加载数据集:
d <- d[,c("year", "cname", "wdi_unempilo", "wdi_povgap190", "mad_gdppc", "cai_request", "wdi_homicides")]
之后我必须为每年创建一个新变量,然后使用它来重新编码导致问题的原始变量,然后删除创建的变量:
d$abort_2016 <- ifelse(d$Country=="Uruguay" & d$Year==2016, 1, d$abort)
d$abort_2017 <- ifelse(d$Country=="Uruguay" & d$Year==2017, 1, d$abort)
d$abort_2018 <- ifelse(d$Country=="Uruguay" & d$Year==2018, 1, d$abort)
d$abort <- ifelse(d$abort_2016 == 1, 1, d$abort)
d$abort <- ifelse(d$abort_2017 == 1, 1, d$abort)
d$abort <- ifelse(d$abort_2018 == 1, 1, d$abort)
d <- subset(d, select = -c(abort_2016,abort_2016) )
d <- subset(d, select = -c(abort_2017,abort_2017) )
d <- subset(d, select = -c(abort_2018,abort_2018) )
这解决了我的问题