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

R 变异以在每行中创建最小值,r,dplyr,R,Dplyr,我有一个关于在dplyr中使用基于其他两列的mutate函数在新列中创建最小值的问题 以下代码对新列中的每一行重复相同的值。有没有办法为新列中的每一行创建一个独立的最小值?由于速度原因,我希望避免使用循环或apply系列,如果可能的话,我希望坚持使用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) colname

我有一个关于在dplyr中使用基于其他两列的mutate函数在新列中创建最小值的问题

以下代码对新列中的每一行重复相同的值。有没有办法为新列中的每一行创建一个独立的最小值?由于速度原因,我希望避免使用循环或apply系列,如果可能的话,我希望坚持使用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”的最小值,有什么建议吗


谢谢你的帮助

我们可以使用
pmin

y$d <- with(y, pmin(b, c))
或使用
dplyr

library(dplyr)
y %>%
  mutate(d = pmin(b,c))
min
按列工作,假设我们要使用
min
,一个选项是

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

通过使用
apply
函数并将
margin
参数设置为
margin=1
,可以按行而不是按列应用
min
函数。您的行最小值函数如下所示:

apply(y, MARGIN = 1, FUN = function(x) min(x)))
y %>% mutate(b.c.min = 
  y %>%
    select(one_of("b", "c")) %>%
    apply(MARGIN = 1, FUN = function(x) min(x)))
然后,为了使rowwise min函数仅适用于列b和c,您可以使用
mutate
中的
select
函数,如下所示:

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

这(pmin)起了作用。非常感谢。我会尽快接受答案(7分钟后)。非常感谢。创建
y
的一种更简单的方法是执行
y=data.frame(A,b,c)
,这样就不需要单独设置
colnames