R - 仅在行子集上改变列子集

标签 r dplyr

我的目标是使用 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)
)

假设我只想将 Date2020-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/

相关文章:

r - 无法修复 R 中未找到的对象 'dataset'

r - 加载 dplyr 包时更改 stats::lag 的行为

r - 将 bool 列添加到 data.frame 中,指示特定列是否全部为 NA

r - 按 id 匹配并在两个数据帧中划分列值

css - Shiny 的页脚位置

中间重新整形

r - R 中的 cv.lars 错误

r - 基于另一列的分组扩展列(dplyr/tidyr)

r - 如何防止 RMySQL 警告 "Unsigned INTEGER in col imported as numeric"?

r - 如何在 dplyr::mutate() 的 RHS 上使用动态变量?