我的目标是使用 dplyr
仅在验证特定条件的行子集上修改某些列的值(通过其名称选择)。
我有这个玩具数据框
library(dplyr)
set.seed(42)
df1 <- data.frame(
Date = rep(seq.Date(as.Date("2020-01-01"), as.Date("2020-01-31"), "day"), each = 24),
A1 = runif(744, min = 0, max = 1000),
A2 = runif(744, min = 0, max = 1000),
B1 = runif(744, min = 0, max = 1000),
B2 = runif(744, min = 0, max = 1000)
)
假设我只想将 Date
为 2020-01-01
的行中以字母“B”开头的列的值乘以 0.2 > 或2020-01-06
。本例中的代码非常简单:
df2 <- df1 %>%
mutate(
B1 = if_else(Date %in% as.Date(c("2020-01-01", "2020-01-06")), 0.2 * B1, B1),
B2 = if_else(Date %in% as.Date(c("2020-01-01", "2020-01-06")), 0.2 * B2, B2)
)
但是,如果我有很多以字母“B”开头的变量,我想以自动方式执行此操作。我在以下代码块中尝试了 mutate_at
df2 <- df1 %>%
mutate_at(
vars(starts_with("B")),
if_else(Date %in% as.Date(c("2020-01-01", "2020-01-06")), 0.2 * ., .)
)
但是 R 给了我以下错误:
Error in Date %in% as.Date(c("2020-01-01", "2020-01-06")) :
object "Date" not found
我做错了什么?我看过这个question但我想找到一种不定义自定义函数的方法。
最佳答案
参见this post了解更多信息
df1 %>%
mutate_at(vars(starts_with("B")),
.funs = list(~ if_else(Date %in% as.Date(c("2020-01-01", "2020-01-06")), 0.2 * ., .)))
关于R - 仅在行子集上改变列子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60726859/