变异以在每行中创建最小值

时间:2016-02-11 02:43:19

标签: r dplyr

我有一个问题涉及在dplyr中使用基于另外两列的mutate函数在新列中创建最小值。

以下代码为新列中的每一行重复相同的值。有没有办法为新列中的每一行创建一个独立的最小值?我希望避免因速度而使用循环或应用系列,并且如果可能的话,我希望坚持使用dplyr。这是代码:

a = data.frame(runif(5,0,5))
b = data.frame(runif(5,0,5))
c = data.frame(runif(5,0,5))

y = cbind(a,b,c)

colnames(y) = c("a","b","c")

y = mutate(y, d = min(y$b, y$c))

y

新列“d”只是重复相同的数字。有关如何修复它的任何建议,以便它是每行中“b”和“c”的最小值?

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

我们可以使用pmin

y$d <- with(y, pmin(b, c))

或者

transform(y, d = pmin(b,c))

dplyr

library(dplyr)
y %>%
  mutate(d = pmin(b,c))

min按列工作,假设我们想要使用min,则选项将是

y %>%
  rowwise %>% 
  mutate(d = min(unlist(c(b,c))))

答案 1 :(得分:0)

您可以使用min函数并将apply参数设置为margin,使MARGIN = 1函数按行而不是列应用。你的行向最小函数看起来像这样:

apply(y, MARGIN = 1, FUN = function(x) min(x)))

然后,为了使rowwise min函数仅适用于列b和c,您可以使用select中的mutate函数,如下所示:

y %>% mutate(b.c.min = 
  y %>%
    select(one_of("b", "c")) %>%
    apply(MARGIN = 1, FUN = function(x) min(x)))