Рассчитать конкретную строку на основе мин - PullRequest
0 голосов
/ 10 мая 2018

Мои данные выглядят так:

df <- data.frame(x = c(3, 5, 4, 4, 3, 2),
                 y = c(.9, .8, 1, 1.2, .5, .1))

Я пытаюсь умножить каждое значение x на y или 1, в зависимости от того, какое из них имеет наименьшее значение.

df$z <- df$x * min(df$y, 1)

Проблема в том, что он берет мин всего столбца, поэтому он умножает каждый x на 0,1.

Вместо этого мне нужно x, умноженное на .9, .8,1, 1, .5, .1 ...

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Может быть, вы могли бы использовать функцию ifelse:

df <- data.frame(x = c(3, 5, 4, 4, 3, 2),
             y = c(.9, .8, 1, 1.2, .5, .1))

df$z = ifelse(df$y<1, df$x*df$y, df$x*1)

При этом будут сравниваться значения каждой строки.

Надеюсь, это поможет! :)

0 голосов
/ 10 мая 2018

Нам нужно pmin, которое пройдет через каждое значение 'y' и получит минимальное значение при сравнении со вторым значением (которое перерабатывается)

pmin(df$y, 1)
#[1] 0.9 0.8 1.0 1.0 0.5 0.1

Аналогично, мы можем иметьn аргументов (в качестве параметра ...)

pmin(df$y, 1, 0)
#[1] 0 0 0 0 0 0

Чтобы получить вывод, просто умножьте 'x' на pmin output

df$x * pmin(df$y, 1)

который также можно записать как

with(df, x * pmin(y, 1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...