Во-первых, я пытаюсь сделать выборку большого набора данных со многими индивидуумами, но каждый индивид требует разного размера выборки.Я сравниваю данные за два периода времени, поэтому я хочу выбрать каждого человека по минимальным точкам данных, которые есть у каждого из двух периодов.Во-вторых, у меня есть несколько метрик (в основном, различные средства) для расчета на одного человека за период времени (я привел один пример ниже).В-третьих, я хочу загрузить 1000 повторений для этих показателей.Я также хочу сделать это для населения (путем усреднения по отдельным лицам).У меня есть пример того, что я попробовал ниже, но это может быть далеко.Я открыт для функций или для циклов - я не могу понять, что лучше для этого вопроса.(Я заранее прошу прощения, если мой код неэффективен - я самоучка по поиску.)
# Example dataset
Data <- data.frame(
ID = sample(c("A", "B", "C", "D"), 50, replace = TRUE),
Act = sample(c("eat", "sleep", "play"), 50, replace = TRUE),
Period = sample(c("pre", "post"), 50, replace = TRUE)
)
# Separate my data by period
DataPre <- as.data.frame(Data[ which(Data $Period == "pre"), ])
DataPost <- as.data.frame(Data[ which(Data $Period == "post"), ])
# Get the minimum # observations for each ID across both periods
Num <- Data %>%
group_by(ID, Period) %>%
summarise(number=n()) %>%
group_by(ID) %>%
summarise(min=min(number))
# Function to get the mean proportion per ID
meanAct <- function(x){
x %>%
group_by(ID, Act) %>%
summarise (n = n()) %>%
mutate(freq = n / sum(n))
}
Ниже приведен пример подбора образцов, если только ОДИН ID (не так много разных с различными требованиями к подвыборке),Я не знаю, как указать для выборки разных сумм по идентификатору, а затем реплицировать каждое.
# See "8888" Here I want to subsample the Num$Min for each ID
DataResults <- function(x, rep){
reps <- replicate(rep, meanAct(x[sample(1:nrow(x), 8888, replace=FALSE),]))
meanfreq <- apply(simplify2array(reps[3, 1:2]), 1, mean)
sd <- apply(simplify2array(reps[3, 1:2]), 1, sd)
lower <- meanfreq - 1.96*(sd/sqrt(8888))
upper <- meanfreq + 1.96*(sd/sqrt(8888))
meanAct <- as.vector(reps[[1]])
output <- data.frame(meanAct, meanfreq, sd, lower, upper)
print(output)
}
# Print results
DataResults(DataPre, 1000)
DataResults(DataPost, 1000)
# Somehow I get the mean for the population by averaging across all IDs
DataMeanGroup <- DataMean %>%
group_by(Period) %>%
summarise (mean = mean(prop))
Результаты, которые я ищу, - это средства для каждого действия для каждого человека на основе подвыборки (минимумточки данных на человека) и начальная загрузка 1000 повторений.Кроме того, если возможно, общее среднее значение для населения путем усреднения по отдельным лицам (опять же из подвыборки и начальной загрузки).
РЕДАКТИРОВАТЬ: Дополнительная информация: Окончательный результат должен позволить мне сравнить пропорциювремени, в течение которого каждый идентификатор выполняет каждое действие в течение двух периодов времени (например, сравнивайте% времени, в течение которого А тратил еду в предыдущем посте и т. д.).Но субдискретизирован за период со слишком большим количеством данных, чтобы мы сравнивали равное количество наблюдений.То, как код будет работать в моей голове, будет: (1) подвыборка наблюдений, чтобы мы сравнивали равное количество наблюдений для каждого идентификатора за два периода, (2) вычисление доли каждого действия для каждого идентификатора в каждомпериод времени, (3) повторите подсчет выборки 1000 раз, чтобы полученная пропорция соответствовала общему количеству наблюдений.