【发布时间】:2021-04-01 04:06:19
【问题描述】:
我有这个虚拟数据集,我想根据行有条件地转换一列。
这是数据集。
> dput(df)
structure(list(year = c(2012, 2013, 2014, 2015, 2016, 2017, 2018,
2019, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2012, 2013,
2014, 2015, 2016, 2017, 2018, 2019, 2012, 2013, 2014, 2015, 2016,
2017, 2018, 2019, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2012, 2013, 2014,
2015, 2016, 2017, 2018, 2019), id = c(1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4,
4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7,
7, 7, 7, 7, 7, 7), apv = c("Y", "Y", "Y", "Y", "Y", "Y", "Y",
"Y", "Y", "Y", "Y", "NA", "NA", "NA", "NA", "NA", "Y", "Y", "Y",
"Y", "Y", "N", "NA", "NA", "Y", "Y", "Y", "Y", "Y", "N", "N",
"N", "Y", "Y", "Y", "N", "N", "N", "NA", "NA", "Y", "Y", "Y",
"Y", "Y", "Y", "N", "Y", "Y", "Y", "Y", "N", "N", "N", "Y", "Y"
), apv_d = c("Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y",
"Y", "N", "NA", "NA", "NA", "NA", "Y", "Y", "Y", "Y", "Y", "N",
"NA", "NA", "Y", "Y", "Y", "Y", "Y", "N", "NA", "NA", "Y", "Y",
"Y", "N", "NA", "NA", "NA", "NA", "Y", "Y", "Y", "Y", "Y", "Y",
"N", "Y", "Y", "Y", "Y", "N", "NA", "NA", "Y", "Y")), row.names = c(NA,
-56L), class = c("tbl_df", "tbl", "data.frame"))
所以这是我的数据集,我只有变量 apv,我想将所述列转换为 apv_d
我认为我应该使用带有 match 参数的函数,但我真的很迷茫,因为我以前从未做过函数。
编辑:变量apv 告诉我们公司在每个时期是开放还是关闭。
所以我只想让公司第一次关闭,如果公司从面板中消失(id=2 的情况),我希望apvis N 表示公司的第一次关闭。如果apv 关闭超过一个时期(case id=4)我想生成 NAs
如果apv 是 Y 就保持这样,但如果有 N 次(对于相同的 id),则只保留第一个,其他的都是 NA。
但考虑到 id=2 的情况,第一个周期是 NA,我希望它是 N,其余的 NA
Edit2:由于示例数据的答案很好,但我对真实数据有一些问题,这里是真实数据:real data here
完整数据集中的问题如下所示:
其中 año=year, ruc=id, nombre 是一个无意义的变量。
提前致谢
【问题讨论】:
标签: r database function dataframe dplyr