如何将列范围和行范围内的所有值相乘?

How can I multiply all the values within a column range and row range?

我有一个看起来像这样的 df:

Name No1 No2 No 3
Jack 10 20 30
Eli 10 20 30
Mae 10 20 30
Jack 10 20 30

我想将 2:4 列中的所有值乘以 10 的因数(因此所有列不包括名称列)并且我只想 select 行 Name == Jack

所以,我的最终数据 table 应该是这样的:

Name No1 No2 No 3
Jack 100 200 300
Eli 10 20 30
Mae 10 20 30
Jack 100 200 300

我已经尝试了以下的各种迭代:

df %>% 
         filter(Name == "Jack") %>% 
         select(No1:No3) %>%
         df*10

包括

df %>% 
         filter(Name == "Jack") %>% 
         df[2:4]*10

我也尝试过 if 语句:

new_df <- if(df$name == "Jack"){
          df[2:4]*10}

我们可以使用across循环遍历以'No'开头的列,然后根据'Name'列创建逻辑条件,使用ifelse/if_elsecase_when 根据逻辑进行更改

library(dplyr)
df <- df %>% 
  mutate(across(c(No1, No2, No3),
    ~ case_when(Name == "Jack" ~ .x * 10, TRUE ~ as.numeric(.x))))

也可以作为索引传递

df %>%
    mutate(across(c(2, 3, 4), # or if it is a range 2:4
        ~ case_when(Name == "Jack" ~ .x * 10, TRUE ~ as.numeric(.x))))

或者在base R中,对列和行进行子集化(根据逻辑),乘以10

后赋值回来
df[df$Name == "Jack", -1] <- df[df$Name == "Jack", -1] * 10

数据

df <- structure(list(Name = c("Jack", "Eli", "Mae", "Jack"), No1 = c(10L, 
10L, 10L, 10L), No2 = c(20L, 20L, 20L, 20L), No3 = c(30L, 30L, 
30L, 30L)), class = "data.frame", row.names = c(NA, -4L))