根据 R 中的年份范围,将选定列的 NA 替换为 0

标签 r replace na

在这里关注我的问题:*

当年份 >= 1997 & <=2010 时,我想将 NA 值更改为 0。

这是数据集的一个子集:

    structure(list(gid = c(79600, 79600, 79600, 79600, 79600, 79600, 
79600, 79600, 79600, 79600, 79600, 79600, 79600, 79600, 79600, 
79600, 79600, 79600, 79600, 79600, 79600, 79600, 79600, 79600, 
79600, 79600, 79600, 79600, 79600, 79600, 79601, 79601, 79601, 
79601, 79601, 79601, 79601, 79601, 79601, 79601, 79601, 79601, 
79601, 79601, 79601, 79601, 79601, 79601, 79601, 79601, 79601, 
79601, 79601, 79601, 79601, 79601, 79601, 79601, 79601, 79601
), Year = c(1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 
1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 1981, 
1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 
1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 
2004, 2005, 2006, 2007, 2008, 2009, 2010), TotalConflicts = c(NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), IncidenceConflicts = c(NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 
-60L), class = c("tbl_df", "tbl", "data.frame"))

请注意,IncidenceConflict 列是二进制列。有时我得到 1、0 或 NA。

我试过了,但是没用:

test<- test %>% 
  mutate(across(3:4,  ~replace(.x, .x == "NA" & Year >= 1997, 0)))

最佳答案

澄清后更新的代码:

ifelse 会这样做:

df %>%
  mutate(across(3:4, ~ifelse((Year >= 1997 & Year <= 2010)
                             & is.na(.), 0, .)))
  gid  Year TotalConflicts IncidenceConflicts
   <dbl> <dbl>          <dbl>              <dbl>
 1 79600  1981             NA                 NA
 2 79600  1982             NA                 NA
 3 79600  1983             NA                 NA
 4 79600  1984             NA                 NA
 5 79600  1985             NA                 NA
 6 79600  1986             NA                 NA
 7 79600  1987             NA                 NA
 8 79600  1988             NA                 NA
 9 79600  1989             NA                 NA
10 79600  1990             NA                 NA
11 79600  1991             NA                 NA
12 79600  1992             NA                 NA
13 79600  1993             NA                 NA
14 79600  1994             NA                 NA
15 79600  1995             NA                 NA
16 79600  1996             NA                 NA
17 79600  1997              0                  0
18 79600  1998              0                  0
19 79600  1999              0                  0
20 79600  2000              0                  0
21 79600  2001              0                  0
22 79600  2002              0                  0
23 79600  2003              0                  0
24 79600  2004              0                  0
25 79600  2005              0                  0
26 79600  2006              0                  0
27 79600  2007              0                  0
28 79600  2008              0                  0
29 79600  2009              0                  0
30 79600  2010              0                  0
31 79601  1981             NA                 NA
32 79601  1982             NA                 NA
33 79601  1983             NA                 NA
34 79601  1984             NA                 NA
35 79601  1985             NA                 NA
36 79601  1986             NA                 NA
37 79601  1987             NA                 NA
38 79601  1988             NA                 NA
39 79601  1989             NA                 NA
40 79601  1990             NA                 NA
41 79601  1991             NA                 NA
42 79601  1992             NA                 NA
43 79601  1993             NA                 NA
44 79601  1994             NA                 NA
45 79601  1995             NA                 NA
46 79601  1996             NA                 NA
47 79601  1997              0                  0
48 79601  1998              0                  0
49 79601  1999              2                  1
50 79601  2000              0                  0
51 79601  2001              0                  0
52 79601  2002              0                  0
53 79601  2003              0                  0
54 79601  2004              0                  0
55 79601  2005              0                  0
56 79601  2006              0                  0
57 79601  2007              0                  0
58 79601  2008              0                  0
59 79601  2009              0                  0
60 79601  2010              0                  0
> 





    ggh4x.axis.nesttext.y = element_text(margin = margin(r = 6, l = 6)),



关于根据 R 中的年份范围,将选定列的 NA 替换为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73267849/

相关文章:

r - Shiny (R) 中的“您必须启用 Javascript 才能正确查看此页面”错误

bash - 替换不在括号中的数字?

string - 替换字符串中所有重叠的模式

mysql - 如何仅在 MYSQL 数据库中查找和替换特定字符串的字符串

R - 绘制一条缺少 NA 值的线

r - 使用带有多个分隔符的 strsplit

r - plotly 等值线图 : display country names

r - 如何在创建自己的函数时处理 NA

r - 在 data.frame 中过滤 NAs 值

r - 尝试在 R 中安装与头文件 mpfr.h 相关的 Rmpfr 时出错