У меня была проблема, которая очень похожа на этот question, однако мои данные сгруппированы на два уровня.Удалить строку на основе двух уровней факторов
str(dt)
'data.frame': 202206 obs. of 4 variables:
$ cros : int -205 -200 -195 -190 -185 -180 -175 -170 -165 -160 ...
$ along: Factor w/ 113 levels "100","101","102",..: 1 1 1 1 1 1 1 1 1 1 ...
$ alti : num 1.61 1.6 1.6 1.6 1.6 1.59 1.59 1.59 1.59 1.58 ...
$ year : Factor w/ 6 levels "1979","1983",..: 1 1 1 1 1 1 1 1 1 1 ...
head(dt)
cros along alti year
-205 100 1.61 1979
-200 100 1.60 1979
-195 100 1.60 1979
-190 100 1.60 1979
-185 100 1.60 1979
-180 100 1.59 1979
Эти данные информация из различных разрезов, которая является переменной вдоль, над этим разрезом они измеренными на каждых 5 метрах, которая является переменной CROs высоты, которая является переменной алты. Это они делали в течение нескольких лет, однако иногда разрез был более продолжительным в конкретный год. Поэтому я хочу удалить строки с помощью кросс-точек, которые не измерялись все годы.
Для моего набора данных у меня есть один фактор (along
) с 113 уровнями и в пределах этого множителя у меня есть коэффициент year
с 6 уровнями. В пределах этих значений у меня есть x (along
) и y (alti
), которые я хочу провести анализ за год, однако в течение лет x должны быть одинаковыми значениями. Я хочу для коэффициента cros
удалить значения, которые не встречаются вообще years
для каждого коэффициента along
.
Код я использовал:
require(data.table)
dt <- as.data.table(total)
tt <- dt[,length(unique(along,year)),by=cros]
tt <- tt[V1==max(V1)]
test <-dt[cros %in% tt$cros]
Но я не получаю правильный результат. Я могу представить, что уникальный (по годам) подход не подходит для работы с сгруппированными данными. Однако я не знаю, как это сделать правильно.
Оке здесь немного более ясно, что я хочу
> df <- data.frame(along = c(10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12), year = c(20,20,20,25,25,25,21,21,20,20,25,25,25,21,21,21,20,20,20,20,25,25,25,25,25,21,21,21,21), cros = c(11,12,13,11,12,13,11,12,11,12,11,12,13,11,12,13,14,15,16,17,14,15,16,17,18,12,13,14,15), value = ceiling(rnorm(29)*10))
> df
along year cros value
10 20 11 -3
10 20 12 5
10 20 13 -22
10 25 11 -9
10 25 12 -3
10 25 13 -8
10 21 11 -8
10 21 12 -8
11 20 11 7
11 20 12 -4
11 25 11 -6
11 25 12 9
11 25 13 -5
11 21 11 6
11 21 12 17
11 21 13 -5
12 20 14 -16
12 20 15 -17
12 20 16 -18
12 20 17 -3
12 25 14 -18
12 25 15 -11
12 25 16 -1
12 25 17 6
12 25 18 14
12 21 12 -3
12 21 13 19
12 21 14 16
12 21 15 7
И это, как я хочу, чтобы выглядеть, так что КИО (х) значения, которые не происходят в течение всех лет для удаляют трансект.
along year cros value
10 20 11 -3
10 20 12 5
10 25 11 -9
10 25 12 -3
10 21 11 -8
10 21 12 -8
11 20 11 7
11 20 12 -4
11 25 11 -6
11 25 12 9
11 21 11 6
11 21 12 17
12 20 14 -16
12 20 15 -17
12 25 14 -18
12 25 15 -11
12 21 14 16
12 21 15 7
Вы должны привести воспроизводимый пример, используя некоторые данные о игрушке. например сделайте что-то, что описывает проблему, и покажите нам, что вы ожидаете. Что-то похожее на 'data.table (вдоль = as.factor (rep (1: 2, each = 6)), years = rep (2000: 2003, times = 4))' –