我创建了一个函数,该函数使用2个变量进行分组,并使用第三个变量为每个组创建最小值和最大值。但是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
答案 0 :(得分:1)
如果您想要一种非常有效的方法来解决问题,则可以使用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
答案 1 :(得分:1)
要编写函数,可以执行以下操作:
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))
}
然后通过输入a,b,c作为符号而不是字符来调用
myfunction(dataset,a,b,column)
答案 2 :(得分:0)
尝试一下:
require(dplyr)
result = dataset %>%
dplyr::group_by(a,b) %>%
dplyr::summarise(Totals = n(),
Mnscore = min(c),
Mxscore = max(c))
让我知道它是否有效。