У меня очень большой файл данных (> 300 тыс. Строк), и каждая строка является частью уникальной выборки (> 3000 выборок). Я хочу сгенерировать оценку плотности ядра для каждого отдельного образца и извлечь соответствующую информацию (минимальное значение, максимальное значение, максимальная вероятность оценки плотности, медиана оценки плотности, среднее значение оценки плотности) в отдельную таблицу вместе с названием образца.
Я попытался извлечь информацию из функции ggplot
stat_density_ridges()
, используя изложенные здесь подходы Добавление среднего значения для geom_density_ridges и здесь нарисовать линию на geom_density_ridges , котораяизвлекать данные из stat_density_ridges
и ggplot_build
с помощью purrr::pluck
, но он не предоставляет всю необходимую информацию.
Следующее генерирует некоторые синтетические данные, аналогичные тому, что я хочу:
set.seed(1)
x = runif( 50, max = 40, min = 20 )
set.seed(2)
y = runif( 50, max = 300, min = 100 )
sample.number = c( rep( 1, 20 ), rep( 2, 15 ), rep( 3, 5 ), rep( 4, 10 ) )
d <- data.frame( x, y , sample.number )
И график в ggplot
, который показывает распределение:
ggplot( data = d, aes( x = x, y = as.factor( samples ) ) ) +
labs( x = expression( paste( "x" ) ),
y = expression( paste( "sample number" ) ) ) +
stat_density_ridges()
Я быхотел бы получить таблицу данных со следующей информацией: sample.name
, max(x)
, min(x)
, максимальная высота оценщика плотности ядра и его x
местоположение, медианная высота оценщика плотности ядра и x
местоположение и т. д.
Единственное, что я могу сделать, - это создать длинный и трудный цикл
sample.numbers <- rep( NA, times = max( d$sample.number ) )
max.x <- rep( NA, times = max( d$sample.number ) )
min.x <- rep( NA, times = max( d$sample.number ) )
for( i in 1:max( d$sample.number ) ) {
temp.d = d[ d$sample.number == i, ]
sample.numbers[ i ] = i
max.x[ i ] = max( temp.d$x )
min.x[ i ] = min( temp.d$x )
}
, а затем каким-то образом добавить немного, что создает оценщик плотности и извлекаетинформация из этого. Я предполагаю, что индексирование в R представляет собой более простой способ пройти через это для многих тысяч сэмплов, которые у меня есть при использовании group_by
, но я не могу понять это. Обратите внимание, у меня все еще есть проблемы с тем, чтобы разобраться с трубами в R, поэтому могут потребоваться некоторые простые объяснения, если в решениях есть это.