r - 根据另一列中的值重新编码和传播列中的数据
问题描述
我有一个看起来像这样的表:
Year Tax1 Tax2 Tax3 Tax4
2004 12 123 145 104
2004 145 99 90 56
2005 212 300 240 123
ETC...
Tax# 列提供有关在 Year 列中的值之后的年份支付的税款的信息。我想重新排列表格,并重命名列,所以它看起来像这样:
Year Tax2004 Tax2005 Tax2006 Tax2007 Tax2008
2004 12 123 145 104 NA
2004 145 99 90 56 NA
2005 NA 212 300 240 123
我正在考虑根据年份列将表拆分为单独的表,然后重命名 Tax# 列,然后重新组合在一起。但这有点令人费解,我想知道是否有更简单的方法可以做到这一点?
非常感谢任何帮助。
解决方案
library(dplyr)
library(tidyr)
df <- read.table(text = "
Year Tax1 Tax2 Tax3 Tax4
2004 12 123 145 104
2004 145 99 90 56
2005 212 300 240 123
", header = TRUE)
df %>%
mutate(id = row_number()) %>%
gather(rel_year, amount, contains("Tax")) %>%
mutate(rel_year = as.integer(gsub("Tax", "", rel_year)),
pay_year = Year + rel_year - 1,
pay_year = paste0("Tax", pay_year)) %>%
select(-rel_year) %>%
spread(pay_year, amount)
结果:
Year id Tax2004 Tax2005 Tax2006 Tax2007 Tax2008
1 2004 1 12 123 145 104 NA
2 2004 2 145 99 90 56 NA
3 2005 3 NA 212 300 240 123
推荐阅读
- smt - 逐渐减弱 Maxsat
- postgresql - 错误:列 >>?column?<< 指定了多次
- python - 如何在熊猫数据框中添加计算列?
- python - 有没有办法在opencv python中同时获得主流和子流
- php - 如何制作一个可以获取订单的 Woocommerce php 插件
- python - 添加 Dropout 后,运行时间从每 epoch 约 10 秒增加到每 epoch 约 120 秒?
- angular - 如何在带有 Ionic 选项卡的 Angular 应用程序中使用路由?
- python - django.core.exceptions.FieldError:为 TblDetails 指定了未知字段(类别)?
- github - 如何使用 GitHub Actions 将标签部署到 Netlify?
- python - 如何在python中修复字符串长度