R 在函数中使用最小和最大函数

R 在函数中使用最小和最大函数,r,function,min,R,Function,Min,我创建了一个函数,它使用两个变量进行分组,并使用第三个变量为每个组创建最小值和最大值。但是min和max函数给出了错误的输出。它给出了整个数据集的最小值和最大值,而不是每个组的最小值和最大值 myfunction= function(x,a,b,column) { temp=group_by(x,x[[a]],x[[b]]) Score=summarise(temp,Totals=n(),Mnscore=min(x[[c]]),Mxscore=max(x[[c]])) return(

我创建了一个函数,它使用两个变量进行分组,并使用第三个变量为每个组创建最小值和最大值。但是min和max函数给出了错误的输出。它给出了整个数据集的最小值和最大值,而不是每个组的最小值和最大值

myfunction= function(x,a,b,column) {
  temp=group_by(x,x[[a]],x[[b]])
   Score=summarise(temp,Totals=n(),Mnscore=min(x[[c]]),Mxscore=max(x[[c]]))
 return(Score)
}

myfunction(dataset,"a","b","c")


Actual Results:
a b Totals  Min Max
1 1  10     15  50
1 2  20     15  50
1 3  30     15  50

Expected results:
a b Totals  Min Max
1 1  10     20  48
1 2  20     21  49
1 3  30     15  50
试试这个:

require(dplyr)

result = dataset %>% 
  dplyr::group_by(a,b) %>% 
  dplyr::summarise(Totals = n(),
                   Mnscore = min(c),
                   Mxscore = max(c))
让我知道它是否有效。

试试这个:

require(dplyr)

result = dataset %>% 
  dplyr::group_by(a,b) %>% 
  dplyr::summarise(Totals = n(),
                   Mnscore = min(c),
                   Mxscore = max(c))

让我知道它是否有效。

如果您想要一种非常有效的方法来解决问题,可以使用
data.table
包。尝试以下可重复性最小的示例

library(data.table)
set.seed(20191011L)

data <- data.table(
  V1 = letters[sample(3, 20, TRUE)],
  V2 = letters[sample(3, 20, TRUE)],
  V3 = runif(20)
)

fun <- function(data, groups, target){

  data[, .(min=min(get(target)), max=max(get(target))), mget(groups)]

}

fun(data, c("V1", "V2"), "V3")

##     V1 V2        min       max
##  1:  b  c 0.20653948 0.4618063
##  2:  a  a 0.09560888 0.3347064
##  3:  b  b 0.75071480 0.7507148
##  4:  c  a 0.66410519 0.8258410
##  5:  c  c 0.01303751 0.7635212
##  6:  a  b 0.04770186 0.6332439
##  7:  b  a 0.25069813 0.9008885
库(data.table)
种子集(20191011L)

数据如果您想要一种非常有效的方法来解决问题,可以使用
data.table
包。尝试以下可重复性最小的示例

library(data.table)
set.seed(20191011L)

data <- data.table(
  V1 = letters[sample(3, 20, TRUE)],
  V2 = letters[sample(3, 20, TRUE)],
  V3 = runif(20)
)

fun <- function(data, groups, target){

  data[, .(min=min(get(target)), max=max(get(target))), mget(groups)]

}

fun(data, c("V1", "V2"), "V3")

##     V1 V2        min       max
##  1:  b  c 0.20653948 0.4618063
##  2:  a  a 0.09560888 0.3347064
##  3:  b  b 0.75071480 0.7507148
##  4:  c  a 0.66410519 0.8258410
##  5:  c  c 0.01303751 0.7635212
##  6:  a  b 0.04770186 0.6332439
##  7:  b  a 0.25069813 0.9008885
库(data.table)
种子集(20191011L)

数据要编写函数,可以执行以下操作:

library(tidyverse)
myfunction= function(x,a,b,column) 
  {
  column <- enquo(column)
  vars <- enquos(a,b)
  x %>% 
    group_by(!!!vars) %>% 
    summarise(Totals=n(),Mnscore=min(!!c),Mxscore=max(!!column))
}

要编写函数,可以执行以下操作:

library(tidyverse)
myfunction= function(x,a,b,column) 
  {
  column <- enquo(column)
  vars <- enquos(a,b)
  x %>% 
    group_by(!!!vars) %>% 
    summarise(Totals=n(),Mnscore=min(!!c),Mxscore=max(!!column))
}


你需要学习R中的惰性求值和准引号。你需要学习R中的惰性求值和准引号。这是一个怎样的函数?@Onyambu,不是,但是OP在这里不一定需要函数。我想创建一个函数,因为我必须多次使用该函数。这是一个怎样的函数?@Onyambu,不是,但OP在这里不一定需要函数。我想创建函数,因为我必须多次使用该函数。我想创建函数,因为我必须多次使用该函数。抱歉,没有看到您要求函数。我编辑我的答案以将其实现为函数。我收到了以下错误:中出错。(min=min(get(target)),max=max(get(target)):找不到函数。“”请确保您的数据是
data.table
而不是
data.frame
,我想创建为函数,因为我必须多次使用该函数。抱歉,没有看到你要求一个功能。我编辑我的答案以将其作为一个函数来实现。我得到了这个错误:错误在。(min=min(get(target)),max=max(get(target)):找不到函数“.”“确保您的数据是
数据表,而不是
数据框架
rlang 0.4.0
,这实际上是
的快捷方式!!enquo()
。所以,现在你可以做
…%>%汇总(Totals=n(),Mnscore=min({column}),Mxscore=max({column}))
。(另外,通常不建议使用
c
作为变量名,因为它与内置的
c()
冲突)@ArtemSokolov true不建议使用c.
rlang 0.4.0
,这实际上是
的快捷方式!!enquo()
。所以,现在你可以做
…%>%汇总(Totals=n(),Mnscore=min({column}),Mxscore=max({column}))
。(另外,通常不建议使用
c
作为变量名,因为它与内置的
c()
冲突)@ArtemSokolov true不建议使用c。