首页 > 解决方案 > 使用 if 条件删除特定的列/行值

问题描述

这可能是直截了当的,但我正在努力奋斗。

我有一个 1999 年到 2000 年间不同行业的数据框。

     fyear           industry      employees
1    1999            Agriculture   132.260
2    2000            Agriculture   154.590
3    2001            Agriculture   147.725
4    2002            Agriculture   142.098
5    2003            Agriculture    77.169
6    2004            Agriculture    82.979
7    2005            Agriculture    99.625
8    2006            Agriculture    98.195
9    2007            Agriculture    95.193
10   2008            Agriculture   104.459
11   2009            Agriculture   182.930
12   2010            Agriculture   180.648
13   2011            Agriculture   173.408
14   2012            Agriculture   181.483
15   2013            Agriculture   109.842
16   2014            Agriculture    90.177
17   2015            Agriculture    92.067
18   2016            Agriculture    83.568
19   2017            Agriculture    70.251
20   2018            Agriculture    65.082
21   2019            Agriculture    82.754
22   1999               Aircraft   653.194
23   2000               Aircraft   692.918
24   2001               Aircraft   666.751
25   2002               Aircraft   633.565
26   2003               Aircraft   687.611
27   2004               Aircraft   701.827
28   2005               Aircraft   725.825
29   2006               Aircraft   751.171
30   2007               Aircraft   744.060
31   2008               Aircraft   750.319
32   2009               Aircraft   677.598
33   2010               Aircraft   690.605
34   2011               Aircraft   712.501
35   2012               Aircraft   716.985
36   2013               Aircraft   709.918

我正在尝试创建一些增长变量

df$employeegrowth <- df$employees / lag(df$employees) - 1

这自然会导致每个“1999”行出现一些问题,我想将其替换为 NA。

我正在尝试使用 if 公式解决此问题:

df$employeegrowth <- if(df$fyear == "1999") {
  df$employeegrowth <- "NA"
}

但这会将员工增长列中的每个值都替换为 NA。

我不想删除整行,因为其他列包含有价值的信息。

有人能指出我正确的方向吗?

标签: rdataframeif-statement

解决方案


按组使用lag

library(dplyr)

df %>% 
   group_by(industry) %>% 
   mutate(employeegrowth = employees/lag(employees) - 1)

#   fyear industry    employees employeegrowth
#   <int> <chr>           <dbl>          <dbl>
# 1  1999 Agriculture     132.         NA     
# 2  2000 Agriculture     155.          0.169 
# 3  2001 Agriculture     148.         -0.0444
# 4  2002 Agriculture     142.         -0.0381
# 5  2003 Agriculture      77.2        -0.457 
# 6  2004 Agriculture      83.0         0.0753
# 7  2005 Agriculture      99.6         0.201 
# 8  2006 Agriculture      98.2        -0.0144
# 9  2007 Agriculture      95.2        -0.0306
#10  2008 Agriculture     104.          0.0973
# … with 26 more rows

这将给出每个NA中的第一个值。fyearindustry


推荐阅读