我有一个问题涉及在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”的最小值?
感谢您的帮助。
答案 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)))