In a previous question (Creating a New Variable for Each Unique Group), I learned how to use the "pivot_longer()" function in R for formatting data:
v1 <- c("2010-2011","2011-2012", "2012-2013", "2013-2014", "2014-2015")
v2 <- c("A", "B", "C", "D", "E")
data_1 = data.frame(var_1 = rnorm(871, 10,10), var_2 = rnorm(871, 5,5))
data_1$dates <- as.factor(sample(v1, 871, replace=TRUE, prob=c(0.5, 0.2, 0.1, 0.1, 0.1)))
data_1$types <- as.factor(sample(v2, 871, replace=TRUE, prob=c(0.3, 0.2, 0.1, 0.1, 0.1)))
data_2 = data.frame(var_1 = rnorm(412, 10,10), var_2 = rnorm(412, 5,5))
data_2$dates <- as.factor(sample(v1, 412, replace=TRUE, prob=c(0.5, 0.2, 0.1, 0.1, 0.1)))
data_2$types <- as.factor(sample(v2, 412, replace=TRUE, prob=c(0.3, 0.2, 0.1, 0.1, 0.1)))
data_3 = data.frame(var_1 = rnorm(332, 10,10), var_2 = rnorm(332, 5,5))
data_3$dates <- as.factor(sample(v1, 332, replace=TRUE, prob=c(0.5, 0.2, 0.1, 0.1, 0.1)))
data_3$types <- as.factor(sample(v2, 332, replace=TRUE, prob=c(0.3, 0.2, 0.1, 0.1, 0.1)))
data_1$group = as.factor("A")
data_2$group = as.factor("B")
data_3$group = as.factor("C")
#data frame
dt = rbind(data_1, data_2, data_3)
library(tidyverse)
list(data_1, data_2, data_3) %>%
set_names(paste0("data_", 1:length(.))) %>%
bind_rows(.id = "data_nr") %>%
count(data_nr, dates, name = "my_counts") %>%
pivot_wider(names_from = dates, values_from = my_counts, names_prefix = "counts_")
This produces the following data set:
# A tibble: 3 x 6
data_nr `counts_2010-2011` `counts_2011-2012` `counts_2012-2013` `counts_2013-2014` `counts_2014-2015`
<chr> <int> <int> <int> <int> <int>
1 data_1 443 171 83 93 81
2 data_2 200 78 44 47 43
3 data_3 172 61 32 33 34
I would like to add several more columns to the above table, such as:
mean_var1_2010-2011mean_var1_2011-2012etc.mean_var2_2010-2011mean_var2_2011-2012etc.30thquantile_var1_2010-201130thquantile_var1_2011-2012etc.30thquantile_var2_2010-201130thquantile_var2_2011-2012etc.
I tried to modify the above code to do this:
#put everything in one data frame to make it easier
data_1$group = as.factor("A")
data_2$group = as.factor("B")
data_3$group = as.factor("C")
#data frame
dt = rbind(data_1, data_2, data_3)
#QUESTION
final = dt %>%
bind_rows(.id = "data_nr") %>%
count(data_nr, dates, name = "my_counts") %>%
mean(data_nr, dates, var_1, name = "my_mean_var_1") %>%
mean(data_nr, dates, var_2, name = "my_mean_var_2") %>%
quantile(data_nr, dates, var_1, probs = 0.3, name = "my_30_percentile_var_1") %>%
quantile(data_nr, dates, var_2, probs = 0.3, name = "my_30_percentile_var_2") %>%
pivot_wider(names_from = dates, values_from = c(my_counts, my_mean_var_1, my_mean_var_2, my_30_percentile_var_1, my_30_percentile_var_2), names_prefix = "counts_")
But I don't think this is the correct way to do this
Can someone please show me how to do this?
Thanks!