【问题标题】:Why this function is not finding the minimum value in R?为什么这个函数没有找到 R 中的最小值?
【发布时间】:2016-02-24 15:28:18
【问题描述】:

数据

我有两个向量组合起来创建一个data.frame

datax = data.frame(vlead = vlr, vfoll= vr) 



> dput(datax)
    structure(list(vlead = c(18, 18.1, 18.2, 18.3, 18.4, 18.5, 18.6, 
    18.7, 18.8, 18.9, 19, 19.1, 19.2, 19.3, 19.4, 19.5, 19.6, 19.7, 
    19.8, 19.9, 20, 20.1, 20.2, 20.3, 20.4, 20.5, 20.6, 20.7, 20.8, 
    20.9, 21, 21.1, 21.2, 21.3, 21.4, 21.5, 21.6, 21.7, 21.8, 21.9, 
    22, 22.1, 22.2, 22.3, 22.4, 22.5, 22.6, 22.7, 22.8, 22.9, 23, 
    23.1, 23.2), vfoll = c(20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 
    20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 
    20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 
    20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20)), .Names = c("vlead", 
    "vfoll"), row.names = c(NA, -53L), class = "data.frame") 

功能

以及以下功能:

s_BX <- function(v,vl){
  1.5 + 0.9*min(v,vl)
}  

我想做什么

datax 数据框中,我想创建一个名为BX 的新列,这是给定vlead 和vfoll 函数s_BX 的结果:

library(dplyr)
> datax %>% mutate(BX = s_BX(vfoll, vlead))

但是结果是错误的:

vlead vfoll   BX
    1   18.0    20 17.7
    2   18.1    20 17.7
    3   18.2    20 17.7
    4   18.3    20 17.7
    5   18.4    20 17.7
    6   18.5    20 17.7
    7   18.6    20 17.7
    8   18.7    20 17.7
    9   18.8    20 17.7
    10  18.9    20 17.7

该函数不是获取给定行的vleadvfollminimum,而是获取整个向量的min

问题

如何解决此问题以获得以下预期输出?

> BX = sapply(vlr, function (x) 1.5+0.9*min(20,x))
> BX
 [1] 17.70 17.79 17.88 17.97 18.06 18.15 18.24 18.33 18.42 18.51 18.60 18.69 18.78 18.87 18.96
[16] 19.05 19.14 19.23 19.32 19.41 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50
[31] 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50
[46] 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50

【问题讨论】:

  • 在您的函数s_BX 中将min 更改为pmin
  • @Arun 非常感谢pmin

标签: r dplyr


【解决方案1】:

你可以使用rowwise():

datax %>% rowwise() %>% mutate(BX = s_BX(vfoll, vlead))

【讨论】:

  • 我收到错误:Error: incompatible types, expecting a numeric vector
  • 它适用于您发布的结构。我的 dplyr 版本是 0.4.1。你的是什么?
  • 我有dplyr 0.4.3。它给了我错误,但感谢您的回答。不知道rowwise
  • 我在dplyr 0.4.3 上检查过它仍然有效。您确定您在发布时没有对数据结构进行任何更改吗?
  • 是的,没有做任何改变。我会在重启 R 后尝试。
猜你喜欢
  • 2018-05-11
  • 2021-12-07
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
  • 2020-02-24
  • 2011-01-06
相关资源
最近更新 更多