R 根据不同TIBLE的截止值更改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:
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)