Vorrei utilizzare il pacchetto R dplyr per calcolare le seguenti domande relative intervallo senza utilizzando i cicli:dplyr e gli intervalli: contano osservazioni e dati somma senza l'utilizzo di loop
- vorrei contare le osservazioni in ogni intervallo (intervallo endpoint assoluti e relativi)
- desidero sommare i dati di osservazione in ciascun intervallo (intervallo endpoint assoluti e relativi)
L'intervallo endpoint dalle colonne df_abs $ intervallo e df_rel $ intervallo. per esempio.
- intervallo: (-INF -60]
- intervallo: (-60, -30]
- intervallo: (-30,0]
I frame di dati con i dati e gli intervalli di simile a questa:
library(dplyr)
# ----------{ data and interval ----------
df_data <- data.frame(varA = NA,
varB = NA,
varC = c(-81.0, -14.3, 29.6, 42.7, 46.4, 57.7, 15.3, 256.3, 20.3, -25.1, -23.1, -17.5))
df_abs <- data.frame(interval = c(-Inf, -60, -30, 0, 30, 60, 100, 200, Inf),
count = NA,
sum = NA)
df_rel <- data.frame(interval = c(0,5,15,50,75,95,100),
count = NA,
sum = NA)
# ---------- data and interval }----------
# ----------{ calculation ----------
# absolute data frame
for (i in 1 : nrow(df_abs)-1) {
# count observation between interval
df_abs$count[i+1] <- summarise(df_data, sum(df_abs$interval[i] < varC & varC <= df_abs$interval[i+1]))
# sum between interval
df_abs$sum[i+1] <- sum(df_data$varC[df_abs$interval[i] < df_data$varC & df_data$varC <= df_abs$interval[i+1]])
}
# relative data frame
df_data_arranged <- df_data %>%
arrange(varC) %>%
mutate(observationPercent = c(1:nrow(df_data)) * 100/length(df_data$varC))
for (i in 1 : nrow(df_rel)-1) {
# count observation between interval
df_rel$count[i+1] <- summarise(df_data_arranged, sum(df_rel$interval[i] < observationPercent & observationPercent <= df_rel$interval[i+1]))
# sum between interval
df_rel$sum[i+1] <- sum(df_data_arranged$varC[df_rel$interval[i] < df_data_arranged$observationPercent & df_data_arranged$observationPercent <= df_rel$interval[i+1]])
}
# ---------- calculation }----------
La risposta dovrebbe essere simile a questo:
df_abs <- data.frame(interval = c(-Inf, -60, -30, 0, 30, 60, 100, 200, Inf),
count = c(0,1,0,4,3,3,0,0,1),
sum = c(0,-81,0,-80,65.2,146.8,0,0,256.3))
df_rel <- data.frame(interval = c(0,5,15,50,75,95,100),
count = c(0,0,1,4,3,2,1),
sum = c(0,0,-81,-39.6,92.6,104.1,256.3))
Per quanto comprendo il pacchetto dplyr, ci dovrebbe essere una soluzione piuttosto corta e diretta per ciascuno dei due problemi senza dover utilizzare i loop.