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

标签 r tidyverse

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

<表类=“s-表”> <标题> 姓名 No1 No2 第3 <正文> jack 10 20 30 伊莱 10 20 30 梅 10 20 30 jack 10 20 30

我想将第 2:4 列中的所有值乘以 10 倍(因此除“名称”列之外的所有列),并且我只想选择 Name == Jack 所在的行.

所以,我的最终数据表应该如下所示:

<表类=“s-表”> <标题> 姓名 No1 No2 第3 <正文> jack 100 200 300 伊莱 10 20 30 梅 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))

关于r - 如何将列范围和行范围内的所有值相乘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71699422/

相关文章:

r - 在R中如何填写没有出现在序列中的数字?

r - R中的as.h2o()将文件上传到h2o环境需要很长时间

r - 在神经网络中的函数 a(i) 和 b(j) 之间进行插值

r - 仅使用 tidyverse 从 R 中每一行的唯一代码中提取某些字母

r - 当矢量化不可行时,在数据框中迭代行的 tidyverse 方法是什么?

r - SelectInput 选项隐藏在 Shiny 应用程序中的下载按钮后面

r - 同时在 dplyr 中对多列进行 Shapiro.test

r - 使用 mean_cl_boot 获取 stat_summary 计算的值

r - 将数据文件和标签文件组合在一起,在 R 中拥有一个单一的标签数据框

r - 当列名称-值对存储在列表中时过滤数据框?