首页 > 解决方案 > 根据另一列中的值将函数应用于给定列的特定行

问题描述

抱歉,我认为可能有一个非常简单的答案,我无法锻炼。

我有一张我修改过的表。我只想插入 Years=2010:2020 的人口。该表仅包含 1 个国家/地区,但该表有 16107 行。

我知道插值方程是:mutate_at(vars(population, gdp.x), na.approx, method="linear"

我试过申请:apply(ssp[5,6], ssp[2]==2010:2020, mutate_at(vars(population, gdp.x), na.approx, method="linear"))

Groups:   Country [177]
   Country      Year Model           Scenario       population   gdp.x SSP   Version Date   Series.Name                   Series.Code  Country.Code gdp.y
   <chr>       <dbl> <chr>           <chr>               <dbl>   <dbl> <chr> <chr>   <chr>  <chr>                         <chr>        <chr>        <dbl>
 1 Afghanistan  2010 OECD Env-Growth SSP2_v9_130325       28.0  0.0159 SSP2  v9      130325 NA                            NA           NA            NA  
 2 Afghanistan  2011 OECD Env-Growth SSP2_v9_130325       NA   NA      SSP2  v9      130325 NA                            NA           NA            NA  
 3 Afghanistan  2012 OECD Env-Growth SSP2_v9_130325       NA   NA      SSP2  v9      130325 NA                            NA           NA            NA  
 4 Afghanistan  2013 OECD Env-Growth SSP2_v9_130325       NA   NA      SSP2  v9      130325 NA                            NA           NA            NA  
 5 Afghanistan  2014 OECD Env-Growth SSP2_v9_130325       NA   NA      SSP2  v9      130325 NA                            NA           NA            NA  
 6 Afghanistan  2015 OECD Env-Growth SSP2_v9_130325       31.8  0.0206 SSP2  v9      130325 NA                            NA           NA            NA  
 7 Afghanistan  2016 OECD Env-Growth SSP2_v9_130325       NA   NA      SSP2  v9      130325 NA                            NA           NA            NA  
 8 Afghanistan  2017 OECD Env-Growth SSP2_v9_130325       NA   NA      SSP2  v9      130325 GDP growth, constant 2010 USD NYGDPMKTPKDZ AFG            2.7
 9 Afghanistan  2018 OECD Env-Growth SSP2_v9_130325       NA   NA      SSP2  v9      130325 GDP growth, constant 2010 USD NYGDPMKTPKDZ AFG            1.8
10 Afghanistan  2019 OECD Env-Growth SSP2_v9_130325       NA   NA      SSP2  v9      130325 GDP growth, constant 2010 USD NYGDPMKTPKDZ AFG            2.9
# ... with 16,097 more rows

前 20 行的输入

structure(list(Country = c("Afghanistan", "Afghanistan", "Afghanistan", 
"Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", 
"Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", 
"Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", 
"Afghanistan", "Afghanistan"), Year = c(2010, 2011, 2012, 2013, 
2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 
2025, 2026, 2027, 2028, 2029), Model = c("OECD Env-Growth", "OECD Env-Growth", 
"OECD Env-Growth", "OECD Env-Growth", "OECD Env-Growth", "OECD Env-Growth", 
"OECD Env-Growth", "OECD Env-Growth", "OECD Env-Growth", "OECD Env-Growth", 
"OECD Env-Growth", "OECD Env-Growth", "OECD Env-Growth", "OECD Env-Growth", 
"OECD Env-Growth", "OECD Env-Growth", "OECD Env-Growth", "OECD Env-Growth", 
"OECD Env-Growth", "OECD Env-Growth"), Scenario = c("SSP2_v9_130325", 
"SSP2_v9_130325", "SSP2_v9_130325", "SSP2_v9_130325", "SSP2_v9_130325", 
"SSP2_v9_130325", "SSP2_v9_130325", "SSP2_v9_130325", "SSP2_v9_130325", 
"SSP2_v9_130325", "SSP2_v9_130325", "SSP2_v9_130325", "SSP2_v9_130325", 
"SSP2_v9_130325", "SSP2_v9_130325", "SSP2_v9_130325", "SSP2_v9_130325", 
"SSP2_v9_130325", "SSP2_v9_130325", "SSP2_v9_130325"), population = c(27.962207, 
NA, NA, NA, NA, 31.82735098, NA, NA, NA, NA, 36.142924, NA, NA, 
NA, NA, 40.89646358, NA, NA, NA, NA), gdp.x = c(0.01593680064, 
NA, NA, NA, NA, 0.02062235783, NA, NA, NA, NA, 0.02575387325, 
NA, NA, NA, NA, 0.03327524539, NA, NA, NA, NA), SSP = c("SSP2", 
"SSP2", "SSP2", "SSP2", "SSP2", "SSP2", "SSP2", "SSP2", "SSP2", 
"SSP2", "SSP2", "SSP2", "SSP2", "SSP2", "SSP2", "SSP2", "SSP2", 
"SSP2", "SSP2", "SSP2"), Version = c("v9", "v9", "v9", "v9", 
"v9", "v9", "v9", "v9", "v9", "v9", "v9", "v9", "v9", "v9", "v9", 
"v9", "v9", "v9", "v9", "v9"), Date = c("130325", "130325", "130325", 
"130325", "130325", "130325", "130325", "130325", "130325", "130325", 
"130325", "130325", "130325", "130325", "130325", "130325", "130325", 
"130325", "130325", "130325"), Series.Name = c(NA, NA, NA, NA, 
NA, NA, NA, "GDP growth, constant 2010 USD", "GDP growth, constant 2010 USD", 
"GDP growth, constant 2010 USD", "GDP growth, constant 2010 USD", 
"GDP growth, constant 2010 USD", NA, NA, NA, NA, NA, NA, NA, 
NA), Series.Code = c(NA, NA, NA, NA, NA, NA, NA, "NYGDPMKTPKDZ", 
"NYGDPMKTPKDZ", "NYGDPMKTPKDZ", "NYGDPMKTPKDZ", "NYGDPMKTPKDZ", 
NA, NA, NA, NA, NA, NA, NA, NA), Country.Code = c(NA, NA, NA, 
NA, NA, NA, NA, "AFG", "AFG", "AFG", "AFG", "AFG", NA, NA, NA, 
NA, NA, NA, NA, NA), gdp.y = c(NA, NA, NA, NA, NA, NA, NA, 2.7, 
1.8, 2.9, -5.5, 1, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 
-20L), groups = structure(list(Country = "Afghanistan", .rows = structure(list(
    1:20), ptype = integer(0), class = c("vctrs_list_of", "vctrs_vctr", 
"list"))), row.names = 1L, class = c("tbl_df", "tbl", "data.frame"
), .drop = TRUE), class = c("grouped_df", "tbl_df", "tbl", "data.frame"
))

标签: r

解决方案


我设法解决了:

我使用

 mutate_at(vars(population), na.approx, method="linear")

对于我只想插入特定年份的 gdp,我使用了 case_when:

 ssp<-ssp%>%mutate(gdp = case_when(Year>=2010 & Year<=2020 ~ na.approx(gdp)))

推荐阅读