使用mutate()和across()基于R中的另外两个列创建一个列

vbopmzt1  于 2023-02-06  发布在  其他
关注(0)|答案(2)|浏览(294)

我刚刚得到这个示例df:

df = data.frame(A1 = c(1,2,3),
                A2 = c(4,5,6))

我试着用每一个A列除以整列的平均值
首先,我需要一个mean列:

df %>%
  mutate(
    across(matches("A"), ~ mean(.x), .names = "mean_{col}"  )
  )

但是,基于这个问题:Mutate across multiple columns to create new variable sets,我不能用平均值除A的列。我正在尝试:

df %>%
  mutate(
    across(matches("A"), ~ mean(.x), .names = "mean_{col}"  )
  ) %>%
  mutate(
    across(matches("A"), .names = "adm_A_{col}") / across(matches("mean_"))
  )

我做错了什么?

c9qzyr3d

c9qzyr3d1#

df %>%
  mutate(across(starts_with('A'), ~./mean(.),.names = "adm_A_{col}"))

  A1 A2 adm_A_A1 adm_A_A2
1  1  4      0.5      0.8
2  2  5      1.0      1.0
3  3  6      1.5      1.2
txu3uszq

txu3uszq2#

请检查以下代码

df %>%
  mutate(
    across(matches("A"), ~ mean(.x), .names = "mean_{col}"  ), 
    across(starts_with('A'), .names = '{col}_new')/across(starts_with('mean'))
  )

创建于2023年2月2日,使用reprex v2.0.2

A1 A2 mean_A1 mean_A2 A1_new A2_new
1  1  4       2       5    0.5    0.8
2  2  5       2       5    1.0    1.0
3  3  6       2       5    1.5    1.2

相关问题