我正在尝试将自定义函数应用于数据集的所有组。
我尝试将以下自定义函数应用于所有组,但是将其应用于整个数据集。但是,如果我将数据分为多个组并将每个组应用于此功能,则效果很好。
答案 0 :(得分:2)
您几乎拥有了它。您只需要为每个组应用功能。 purrr
库使此操作非常容易。
library(purrr)
library(dplyr)
将组名和完整数据集作为参数,然后按该组进行过滤。然后进行计算并将其作为数据框返回。
width <- function(Group.Name, data){
# limit to rows for that group
df<-data %>% filter(Group == Group.Name)
i.mins <- which(diff(sign(diff(c(Inf, df$Value, Inf)))) == 2)
i.mx <- which.max(df$Value)
i <- sort(c(i.mins, i.mx))
ix <- i[which(i == i.mx) + c(-1, 1)]
# put results in dataframe
df <- data.frame("Group" = Group.Name, "Value_1" = ix[1], "Value_2" = ix[2])
# format Group Col
df$Group <- as.character(df$Group)
return(df)
}
purrr
遍历群组# unique group names we need to loop through for calcs
Group.Names <- unique(data$Group)
# take each name and use the width function
# then put results together in one datframe
Group.Names %>% map_df(~ width(Group.Name = .x, data = data))
Group Value_1 Value_2
1 Group1 16 22
2 Group2 4 12
3 Group3 2 15
注意:.x
符号只是告诉map将Group.Names
对象作为宽度函数的第一个参数