Я хочу свернуть набор данных ниже через Id_no, но только тогда, когда другие переменные отвечают определенным условиям и вычисляют специальную переменную коллапса.Свернуть случаи в dataframe только при определенных условиях
df <- structure(list(Id_no = structure(c(1L, 1L, 1L, 2L, 2L, 3L), .Label = c("n1",
"n2", "n3"), class = "factor"), Band = structure(c(1L, 2L, 3L,
1L, 2L, 1L), .Label = c("Band 1", "Band 2", "Band 3"), class = "factor"),
median = c(252, 191, 107, 130.5, 61.5, 217), sample_size = c(19L,
20L, 1L, 20L, 12L, 1544L)), .Names = c("Id_no", "Band", "median",
"sample_size"), class = "data.frame", row.names = c(NA, -6L))
> df
Id_no Band median sample_size
1 n1 Band 1 252.0 19
2 n1 Band 2 191.0 20
3 n1 Band 3 107.0 1
4 n2 Band 1 130.5 20
5 n2 Band 2 61.5 12
6 n3 Band 1 217.0 1544
Переменная коллапс будет отношение медианы в полосе 1 против означают медиану между диапазонами 2 и 3.
Это будет рассчитываться для Id_no, что на самом деле есть записи как для B1 и по меньшей мере один B2 или B3.
Кроме того, медианные В2 и В3 следует учитывать, только если размер выборки составляет> = 10.
Результирующая таблица Я ищу это:
Id_no b1_vs_rest
1 n1 1.32
2 n2 2.12
Первый шаг, вероятно, чтобы удалить случаи, когда размер выборки не соответствует минимуму:
df <- subset(df, sample_size >=10)
Извините, вы неправильно поняли вопрос. b1_vs_rest должен быть медианным в B1 по средней медианной величине B2 и B3. Цифры идентичны решению ulfelder, потому что в Id_no = n1 sample_size в B3 равен <10, поэтому удаляется, и поэтому b1_vs_rest = B1/B2; но если sample_size было> 10, цифры были бы разными. – Mihael
Я пробовал модифицировать эту часть: 'b1_vs_rest = f (median [Band ==" Band 1 "])/mean (c (f (median [Band ==" Band 2 "]), f (median [Band == «Группа 3»]))) ', но теперь значения равны 2x, какими они должны быть. Есть идеи? – Mihael
@Mihael: Я вижу, вы правы. См. Мое редактирование. – aichao