簡體   English   中英

R - 僅在行子集上改變列子集

[英]R - mutate a subset of columns only on a subset of rows

我的目標是使用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-012020-01-06的行中以字母“B”開頭的列的值乘以 0.2。 本例中的代碼非常簡單:

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

我究竟做錯了什么? 我看過這個問題,但我想找到一種不定義自定義函數的方法。

查看此帖子了解更多信息

df1 %>%
  mutate_at(vars(starts_with("B")),
            .funs = list(~ if_else(Date %in% as.Date(c("2020-01-01", "2020-01-06")), 0.2 * ., .)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM