如何将列范围和行范围内的所有值相乘?
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_else
或case_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))
我有一个看起来像这样的 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_else
或case_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))