Я хотел бы добавить столбец в фрейм данных с условием для другого столбца.
Вот пример. У меня есть простой фрейм данных
library(tidyverse)
set.seed(123)
df <- data.frame(time = seq(1,5,1),
x = seq(1,5,1) + rnorm(n=5, sd=0.3))
> df
time x
1 1 0.8318573
2 2 1.9309468
3 3 3.4676125
4 4 4.0211525
5 5 5.0387863
. Я хотел бы добавить time
, при котором x
превышает определенное значение (например, x > 4
), в новый столбец с именем border_value
.
Следующий код действительно работает:
df <- df %>% mutate(border_value = min(.[.$x > 4, "time"]))
> df
time x border_value
1 1 0.8318573 4
2 2 1.9309468 4
3 3 3.4676125 4
4 4 4.0211525 4
5 5 5.0387863 4
Вопрос
У меня много фреймов данных, в которых значения для x
различаются. Иногда значения не превышают border_value
из x>4
. В этих случаях R генерирует ошибку:
Предупреждающее сообщение: In min (. [. $ X> 4, "time"]): для min нет непустых аргументов; возвращая Inf
Я хотел бы изменить свой код, чтобы эта ошибка не возникала, а R вместо этого помещает NA в столбец. Есть идеи, как это сделать?
Обновление
На основе этого сообщения я смог переписать код на:
df <- df %>%
mutate(border_value = ifelse(test = is.infinite(min(.[.$x > 7, "time"])), yes = NA, no = min(.[.$x > 4, "time"])))
Это не генерирует Inf
s, но все равно генерирует ошибку ...