【发布时间】:2020-04-01 15:14:54
【问题描述】:
我有一个 tibble,其中包含每日不同变量的值。
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))
这些变量需要由在另一个小标题中找到的某些最小值和最大值绑定:
cutoffs <- tibble::tibble(var_name = c('high', 'low', 'sd'),
min = c(0, -5, 10),
max = c(75, 15, 15))
现在我想检查我原来的 df 并对其进行更改,以便将低于 min 的每个值更改为 min,并将高于 max 的每个值更改为 max,其中 min 和 max 位于截止值中。
我目前在 for 循环中执行此操作,但我觉得这里可以使用 map 之类的函数,但我不确定如何使用它。
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)))
}
感谢您帮助创建不使用 for 循环的解决方案。 谢谢:)
【问题讨论】:
-
我不明白为什么你在第二个
tibble中有三个不同的最大值和最小值。什么是high、low和sd? -
您好,很抱歉没有澄清。 cutoff tibble 中的 high、low 和 sd 是 df 中的列名。