我有一个看起来像这样的 df:
我想将第 2:4 列中的所有值乘以 10 倍(因此除“名称”列之外的所有列),并且我只想选择 Name == Jack
所在的行.
所以,我的最终数据表应该如下所示:
我尝试了以下各种迭代:
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))
关于r - 如何将列范围和行范围内的所有值相乘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71699422/