我正在尝试创建新的专栏来查看不同支出的收入比例。这就是我的数据:
Individuals| quarter | wage | foodq1 | foodq2 | rentq1
1 | 2016q1 | 100 | 1 | 2 | 50
1 | 2016q2 | 100 | 1 | 2 | 50
1 | 2016q3 | 200 | 1 | 2 | 50
1 | 2016q4 | 300 | 1 | 2 | 50
2 | 2016q1 | 50 | 1 | 2 | 50
2 | 2016q2 | 100 | 1 | 2 | 50
2 | 2016q3 | 200 | 1 | 2 | 50
2 | 2016q4 | 100 | 1 | 2 | 50
对于比例列,我希望它们看起来像这样:
Individuals| quarter | wage | pro.foodq1 | pro.foodq2 | pro.rentq1
1 | 2016q1 | 100 | .01 | .02 | .5
1 | 2016q2 | 100 | .01 | .02 | .5
1 | 2016q3 | 200 | .01 | .02 | .5
1 | 2016q4 | 300 | .01 | .02 | .5
2 | 2016q1 | 50 | .02 | .04 | 1
2 | 2016q2 | 100 | .02 | .04 | 1
2 | 2016q3 | 200 | .02 | .04 | 1
2 | 2016q4 | 100 | .02 | .04 | 1
我尝试过使用 ifelse() 函数,但是,它创建了很多不必要的行,并且删除它们既乏味又低效。
根据您的示例,您似乎要放弃每个个人组中的第一个值,所以这就是我为这个答案所做的。但是,如果它是最小值,或者您的示例存在错误,请发表评论并告诉我,我会更新它!
df |> mutate(across(foodq1:rentq1, ~ first(.x) / first(wage), .names = "pro.{col}"), .by = Individuals)
输出:
# A tibble: 8 × 9
Individuals quarter wage foodq1 foodq2 rentq1 pro.foodq1 pro.foodq2
<dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 2016q1 100 1 2 50 0.01 0.02
2 1 2016q2 100 1 2 50 0.01 0.02
3 1 2016q3 200 1 2 50 0.01 0.02
4 1 2016q4 300 1 2 50 0.01 0.02
5 2 2016q1 50 1 2 50 0.02 0.04
6 2 2016q2 100 1 2 50 0.02 0.04
7 2 2016q3 200 1 2 50 0.02 0.04
8 2 2016q4 100 1 2 50 0.02 0.04
# ℹ 1 more variable: pro.rentq1 <dbl>
数据:
df <- tibble(
Individuals = rep(1:2, each = 4),
quarter = c("2016q1", "2016q2", "2016q3", "2016q4", "2016q1", "2016q2", "2016q3", "2016q4"),
wage = c(100, 100, 200, 300, 50, 100, 200, 100),
foodq1 = 1,
foodq2 = 2,
rentq1 = 50)