R 根据不同TIBLE的截止值更改TIBLE中不同列的值

R 根据不同TIBLE的截止值更改TIBLE中不同列的值,r,dplyr,purrr,R,Dplyr,Purrr,我有一个TIBLE,它包含每日级别不同变量的值 library(lubridate) library(tidyverse) df <- tibble::tibble(date = seq.Date(ymd('2019-01-01'), ymd('2019-03-31'), by = 1), high = sample(-5:100, 90, replace = T), low = sample(-25:

我有一个TIBLE,它包含每日级别不同变量的值

library(lubridate)
library(tidyverse)


df <- tibble::tibble(date = seq.Date(ymd('2019-01-01'), ymd('2019-03-31'), by = 1),
                     high = sample(-5:100, 90, replace = T),
                     low = sample(-25:50, 90, replace = T),
                     sd = sample(5:25, 90, replace = T))
库(lubridate)
图书馆(tidyverse)

df试试这个。它长时间旋转数据帧,连接到截止点,然后在适用时使用case_替换值:

library(lubridate)
library(tidyverse)


df <- tibble::tibble(date = seq.Date(ymd('2019-01-01'), ymd('2019-03-31'), by = 1),
                     high = sample(-5:100, 90, replace = T),
                     low = sample(-25:50, 90, replace = T),
                     sd = sample(5:25, 90, replace = T)) %>% 
  pivot_longer(-date, names_to = "var_name", values_to = "value")

df

cutoffs <- tibble::tibble(var_name = c('high', 'low', 'sd'),
                          min = c(0, -5, 10),
                          max = c(75, 15, 15))

df %>% 
  left_join(cutoffs) %>% 
  mutate(value_new = case_when(value > max ~ max,
                           value < min ~ min,
                           TRUE ~ as.double(value))) %>% 
  select(date, var_name, value, value_new, min, max)
库(lubridate)
图书馆(tidyverse)
df%
枢轴长度(-date,names\u to=“var\u name”,values\u to=“value”)
df
截止值%
左联合(截止)%>%
当(值>最大值~最大值,
值%
选择(日期、变量名称、值、新值、最小值、最大值)

我不明白为什么在第二个
tibble
中有三个不同的最大值和最小值。什么是
high
low
sd
?很抱歉没有澄清。截断TIBLE中的high、low和sd是df中的列名。
for (i in 1:3){


a <- cutoffs$var_name[[i]]
  print(a)
  min <- cutoffs$min[[i]]
  max <- cutoffs$max[[i]]

  df <- df %>%
    mutate(!!a := ifelse(!!as.name(a) < min, min, !!as.name(a)),
           !!a := ifelse(!!as.name(a) > max, max, !!as.name(a)))

}
library(lubridate)
library(tidyverse)


df <- tibble::tibble(date = seq.Date(ymd('2019-01-01'), ymd('2019-03-31'), by = 1),
                     high = sample(-5:100, 90, replace = T),
                     low = sample(-25:50, 90, replace = T),
                     sd = sample(5:25, 90, replace = T)) %>% 
  pivot_longer(-date, names_to = "var_name", values_to = "value")

df

cutoffs <- tibble::tibble(var_name = c('high', 'low', 'sd'),
                          min = c(0, -5, 10),
                          max = c(75, 15, 15))

df %>% 
  left_join(cutoffs) %>% 
  mutate(value_new = case_when(value > max ~ max,
                           value < min ~ min,
                           TRUE ~ as.double(value))) %>% 
  select(date, var_name, value, value_new, min, max)