group_by list of dataframes grouping by wildcarded columns in R

Viewed 22

A stackoverflow member (Gregor Thomas) helped me, in my previous post, to learn about pivot_longer in order to transform my dataset to do operations on them. This works great if there is a constant grouping column(s). However I found that I have many index columns TS_Wafer(n) resulting in many dataframes.

I combined the dataframes into a list and was able to use the lapply function to perform the pivot_longer on the list of dataframes, however I am stuck when trying to perform the group_by operration. The grouping needs to be grouped such that the n in TS_Wafer(n) matches the Wafer number.

So for example if the dataset is:

TS_Wafer1                           TS_Wafer2               Wafer           value
2022-06-29T03:43:53.767582                                  1           418.274905
2022-06-29T03:43:53.767582                                  1           449.370044
2022-06-29T03:43:53.767582                                  1           412.800065
2022-06-29T03:43:53.767582                                  1           429.350565
                            2022-06-29T02:11:52.485032      2           439.345743
                            2022-06-29T02:11:52.485032      2           415.363545
                            2022-06-29T02:11:52.485032      2           427.456437
                            2022-06-29T02:11:52.485032      2           438.357252

I want to find the max and min where the dataset is grouped with TS_Wafer1 and Wafer=1 Here is the code I have so far:

dflist <- lapply(ls(pattern="df[0-9]+"), function(x) get(x)) # combine dataframes into list
apply_long_func <- function(df) {
    df %>%
        pivot_longer(
                cols= -starts_with("TS"),
                names_pattern = "([0-9]+).*([0-9]+)",
                names_to = c("Wafer", "Radius"),
                values_to = "Temperature"
                ) %>%
                as.data.frame
}
dflong <- lapply(dflist, apply_long_func) #Gives the dataset shown in the example above

#This is where Im not sure
apply_group_func <- function(df){
    df %>%
        group_by(TS,Wafer) %>%
        summarize(
                max=max(value),
                min = min(value),
                .groups = "drop"
                ) %>%
                as.data.frame
}

I would then use the same lapply function for the group_by but how do I specify TS_Wafer(i)? Should I use a for loop? Any help would be greatly appreciated

0 Answers
Related