根据条件将值与其他列相除来创建新列

问题描述 投票:0回答:1

我正在尝试创建新的专栏来查看不同支出的收入比例。这就是我的数据:

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() 函数,但是,它创建了很多不必要的行,并且删除它们既乏味又低效。

r dplyr tidyverse
1个回答
0
投票

根据您的示例,您似乎要放弃每个个人组中的第一个值,所以这就是我为这个答案所做的。但是,如果它是最小值,或者您的示例存在错误,请发表评论并告诉我,我会更新它!

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)
© www.soinside.com 2019 - 2024. All rights reserved.