我需要检查dat
以确保max
是> min
。如果不满足此条件,那么我想将其替换为base
的{{1}}数据。我目前正在使用date
循环,但是当满足很多这些条件时,它确实很慢。有更快的方法吗?
示例数据
for
代码
library(dplyr)
base <- data.frame(id = rep(1, 10), date = seq_along(1:10), max = c(90, 80, 70, 60, 50, 40, 30, 20, 10, 1), min = c(70, 60, 50, 40, 30, 20, 10, 0, -10, -20))
dat <- data.frame(id = rep(1, 10), date = seq_along(1:10), max = c(90, 80, 70, 60, 50, 40, 30, 20, 10, 1), min = c(70, 60, 100, 40, 30, 20, 100, 0, -10, -20))
答案 0 :(得分:2)
我们可以使用逻辑索引('i1')将'dat'中的'date'替换为'base'中相应的'date':
i1 <- !with(dat, max > min)
dat$date[i1] <- base$date[i1]
或者只需一步使用ifelse
:
ifelse(dat$max > min, dat$date, base$date)
如果OP想要将'max'和'min'列值替换为'base'中的相应元素
dat[i1, c('max', 'min')] <- base[i1, c('max', 'min')]