R 在函数中使用最小和最大函数
我创建了一个函数,它使用两个变量进行分组,并使用第三个变量为每个组创建最小值和最大值。但是min和max函数给出了错误的输出。它给出了整个数据集的最小值和最大值,而不是每个组的最小值和最大值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(
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。