У меня есть набор данных следующей структуры
site block treatment date insect1 insect2 insect3 insect4 ...
1 location1 a chemical1 date1 0 0 10 1
2 location1 a chemical2 date1 1 0 2 0
3 location1 a chemical3 date1 0 0 23 1
4 location1 a chemical4 date1 0 0 5 0
5 location1 a chemical5 date1 0 0 9 0
6 location1 b chemical1 date1 0 1 5 0
7 location1 b chemical2 date1 1 0 5 1
8 location1 b chemical3 date1 0 0 4 0
9 location1 b chemical4 date1 0 0 5 0
10 location1 b chemical5 date1 3 0 12 0
11 location1 c chemical1 date1 0 0 2 1
12 location1 c chemical2 date1 0 0 0 0
13 location1 c chemical3 date1 0 0 4 0
14 location1 c chemical4 date1 0 0 2 7
15 location1 c chemical5 date1 2 0 5 0
16 location1 d chemical1 date1 0 0 8 1
17 location1 d chemical2 date1 0 0 3 0
18 location1 d chemical3 date1 0 0 10 0
19 location1 d chemical4 date1 0 0 2 0
20 location1 d chemical5 date1 0 1 7 0
. . . . . . . .
. . . . . . . .
. . . . . . . .
Этот набор данных является результатом эксперимента, который я провел, проверяя влияние различных пяти различных химических обработок (химических веществ 1-5) на притяжениеколичество различных видов насекомых (насекомых здесь 1-4) на полевом участке (местоположение1).Этот эксперимент был заблокирован (объявление) 4 раза в разных местах на этом сайте и повторен 5 раз в разные даты (показана только дата1).Вся эта информация хранится в моих первых четырех столбцах моего набора данных.
Следующая серия столбцов (у меня есть 46, но я показываю только 4) указывает на различные виды насекомых и количествонасекомые, которых я поймал с определенным химическим веществом В каждой обработке x блок x дата комбинации (= каждая строка).
В рамках моего анализа я хочу просмотреть этот набор данных и найти комбинации блока x даты дляКаждое насекомое, где я не поймал насекомых.Например, я не собирал особей насекомых2 в блоке a или c для date1, и поэтому я хотел бы убрать это из моего окончательного набора данных для анализа.
Я потратил много времени, работая над кодом, чтобы выполнитьэто задание, но я обнаружил вчера вечером, что мой код не работает, как я думал, и я со своей стороны пытаюсь понять это.Ниже приведен код (я включил все шаги, чтобы добраться до своей проблемы, чтобы люди могли видеть, где проблема могла возникнуть, или предложить лучший способ решения проблем ...):
Создайте список таким образом, чтобы у каждого вида насекомых (столбцы 5-8 здесь) был свой собственный фрейм данных
sticky.list = lapply(sticky[-c(1:4,50)], function(i)data.frame(site=sticky$site,
block=sticky$block,
treatment=sticky$treatment,
date=sticky$date,
number=as.numeric(i)))
Пример части одного из фреймов данных, который был создан как часть моего списка
$insect1
site block treatment date number
1 location1 a chemical1 date1 0
2 location1 a chemical2 date1 1
3 location1 a chemical3 date1 0
4 location1 a chemical4 date1 0
5 location1 a chemical5 date1 0
Затем добавьте новый столбец в каждом фрейме данных в списке с именем фрейма данных (т. Е. Именем насекомого)
temp.list = Map(cbind, sticky.list, morphotype = names(sticky.list))
site block treatment date number morphotype
1 location1 a chemical1 date1 0 insect1
2 location1 a chemical2 date1 1 insect1
3 location1 a chemical3 date1 0 insect1
4 location1 a chemical4 date1 0 insect1
5 location1 a chemical5 date1 0 insect1
Создайте больший набор данных, комбинируя по вертикали, затем сгладьте каждый элемент списка (то есть, создайте один большой кадр данных. Это объединит все кадры данных из моего предыдущего списка в один кадр данных.
sticky.list.combined.df <- temp.list %>% bind_rows(temp.list) %>% # make larger sample data
mutate_if(is.list, simplify_all) %>% # flatten each list element internally
unnest()
Группируйте по блокам и морфотипам и находите сумму чисел на основе этой группировки. Затем добавьте этостолбец суммы к основному большому массиву данных, который мы только что создали, т.е. sticky.list.combined.df, используя внутреннее объединение.
sticky.list.combined.df.sum<- sticky.list.combined.df %>%
group_by(date, block, morphotype) %>%
summarize(sum = sum(number))
# A tibble: 855 x 4
# Groups: date, block [?]
date block morphotype sum
<fct> <fct> <chr> <dbl>
1 date1 a insect1 0
2 date1 a insect2 0
3 date1 a insect3 0
4 date1 a insect4 0
# … with 845 more rows
затем
sticky.list.analysis<-left_join(sticky.list.combined.df,sticky.list.combined.df.sum, by=c("date"="date",
"morphotype"="morphotype"))
Это примерОуtput показывает только насекомое1.Решающими факторами сохранения 5 строк для каждого block.x являются последние два столбца, block.y и sum, которые указывают сумму всех насекомых, отловленных для химических веществ 1-5 для каждого блока (ad).
site block.x treatment date number morphotype block.y sum
1 location1 a chemical1 date1 0 insect1 a 2
2 location1 a chemical1 date1 0 insect1 b 8
3 location1 a chemical1 date1 0 insect1 c 4
4 location1 a chemical1 date1 0 insect1 d 0
5 location1 a chemical2 date1 0 insect1 a 2
6 location1 a chemical2 date1 0 insect1 b 8
7 location1 a chemical2 date1 0 insect1 c 4
8 location1 a chemical2 date1 0 insect1 d 0
9 location1 a chemical3 date1 0 insect1 a 2
10 location1 a chemical3 date1 0 insect1 b 8
11 location1 a chemical3 date1 0 insect1 c 4
12 location1 a chemical3 date1 0 insect1 d 0
13 location1 a chemical4 date1 0 insect1 a 2
14 location1 a chemical4 date1 0 insect1 b 8
15 location1 a chemical4 date1 0 insect1 c 4
16 location1 a chemical4 date1 0 insect1 d 0
17 location1 a chemical5 date1 0 insect1 a 2
18 location1 a chemical5 date1 0 insect1 b 8
19 location1 a chemical5 date1 0 insect1 c 4
20 location1 a chemical5 date1 0 insect1 d 0
Здесь я считаю, что возникшая у меня проблема
Фильтрация строк с суммой> 0.
Для каждой комбинации даты захвата (например, date1) и morphotype, удалите строки (т. е. блоки ad), которые имеют нулевые захваты морфотипа в этом блоке.Обычно в экспериментах по отлову (и это часто встречается в статистической практике лаборатории Хэнкса) опускать или не включать даты, в которых нет данных о нашем целевом насекомом.Это может быть связано с абиотическими факторами (например, слишком холодно / жарко, дождь) или фенологическими факторами, связанными с насекомым.Оставляя эти нули в наших данных, мы уменьшаем наши шансы на обнаружение значительных эффектов в наших данных, поэтому мы будем их исключать.
sticky.list.analysis.reduced<- sticky.list.analysis %>%
filter(sum > 0)
Сокращенный вывод ниже показывает, что для насекомого1 мы должны хранить блоки ac.Какие блоки хранятся, зависит от того, на какое насекомое смотрят.Теперь я хочу взять эти данные из block.y и использовать их для удаления строк для этих блоков.
К сожалению, это не мой желаемый вывод.R опустил одну строку на основе столбца суммы.Теперь мы видим, что блок d был удален в соответствии со столбцом block.y.К сожалению, нам нужно было отбросить строки 46-60.
Вывод:
site block.x treatment date number morphotype block.y sum
1 location1 a chemical1 date1 0 insect1 a 2
2 location1 a chemical1 date1 0 insect1 b 8
3 location1 a chemical1 date1 0 insect1 c 4
4 location1 a chemical2 date1 0 insect1 a 2
5 location1 a chemical2 date1 0 insect1 b 8
6 location1 a chemical2 date1 0 insect1 c 4
7 location1 a chemical3 date1 0 insect1 a 2
8 location1 a chemical3 date1 0 insect1 b 8
9 location1 a chemical3 date1 0 insect1 c 4
10 location1 a chemical4 date1 0 insect1 a 2
11 location1 a chemical4 date1 0 insect1 b 8
12 location1 a chemical4 date1 0 insect1 c 4
13 location1 a chemical5 date1 0 insect1 a 2
14 location1 a chemical5 date1 0 insect1 b 8
15 location1 a chemical5 date1 0 insect1 c 4
16 location1 b chemical1 date1 0 insect1 a 2
17 location1 b chemical1 date1 0 insect1 b 8
18 location1 b chemical1 date1 0 insect1 c 4
19 location1 b chemical2 date1 0 insect1 a 2
20 location1 b chemical2 date1 0 insect1 b 8
21 location1 b chemical2 date1 0 insect1 c 4
22 location1 b chemical3 date1 0 insect1 a 2
23 location1 b chemical3 date1 0 insect1 b 8
24 location1 b chemical3 date1 0 insect1 c 4
25 location1 b chemical4 date1 0 insect1 a 2
26 location1 b chemical4 date1 0 insect1 b 8
27 location1 b chemical4 date1 0 insect1 c 4
28 location1 b chemical5 date1 0 insect1 a 2
29 location1 b chemical5 date1 0 insect1 b 8
30 location1 b chemical5 date1 0 insect1 c 4
31 location1 c chemical1 date1 0 insect1 a 2
32 location1 c chemical1 date1 0 insect1 b 8
33 location1 c chemical1 date1 0 insect1 c 4
34 location1 c chemical2 date1 0 insect1 a 2
35 location1 c chemical2 date1 0 insect1 b 8
36 location1 c chemical2 date1 0 insect1 c 4
37 location1 c chemical3 date1 0 insect1 a 2
38 location1 c chemical3 date1 0 insect1 b 8
39 location1 c chemical3 date1 0 insect1 c 4
40 location1 c chemical4 date1 0 insect1 a 2
41 location1 c chemical4 date1 0 insect1 b 8
42 location1 c chemical4 date1 0 insect1 c 4
43 location1 c chemical5 date1 0 insect1 a 2
44 location1 c chemical5 date1 0 insect1 b 8
45 location1 c chemical5 date1 0 insect1 c 4
46 location1 d chemical1 date1 0 insect1 a 2
47 location1 d chemical1 date1 0 insect1 b 8
48 location1 d chemical1 date1 0 insect1 c 4
49 location1 d chemical2 date1 0 insect1 a 2
50 location1 d chemical2 date1 0 insect1 b 8
51 location1 d chemical2 date1 0 insect1 c 4
52 location1 d chemical3 date1 0 insect1 a 2
53 location1 d chemical3 date1 0 insect1 b 8
54 location1 d chemical3 date1 0 insect1 c 4
55 location1 d chemical4 date1 0 insect1 a 2
56 location1 d chemical4 date1 0 insect1 b 8
57 location1 d chemical4 date1 0 insect1 c 4
58 location1 d chemical5 date1 0 insect1 a 2
59 location1 d chemical5 date1 0 insect1 b 8
60 location1 d chemical5 date1 0 insect1 c 4
Желаемый вывод:
site block.x treatment date number morphotype block.y sum
1 location1 a chemical1 date1 0 insect1 a 2
2 location1 a chemical1 date1 0 insect1 b 8
3 location1 a chemical1 date1 0 insect1 c 4
4 location1 a chemical2 date1 0 insect1 a 2
5 location1 a chemical2 date1 0 insect1 b 8
6 location1 a chemical2 date1 0 insect1 c 4
7 location1 a chemical3 date1 0 insect1 a 2
8 location1 a chemical3 date1 0 insect1 b 8
9 location1 a chemical3 date1 0 insect1 c 4
10 location1 a chemical4 date1 0 insect1 a 2
11 location1 a chemical4 date1 0 insect1 b 8
12 location1 a chemical4 date1 0 insect1 c 4
13 location1 a chemical5 date1 0 insect1 a 2
14 location1 a chemical5 date1 0 insect1 b 8
15 location1 a chemical5 date1 0 insect1 c 4
16 location1 b chemical1 date1 0 insect1 a 2
17 location1 b chemical1 date1 0 insect1 b 8
18 location1 b chemical1 date1 0 insect1 c 4
19 location1 b chemical2 date1 0 insect1 a 2
20 location1 b chemical2 date1 0 insect1 b 8
21 location1 b chemical2 date1 0 insect1 c 4
22 location1 b chemical3 date1 0 insect1 a 2
23 location1 b chemical3 date1 0 insect1 b 8
24 location1 b chemical3 date1 0 insect1 c 4
25 location1 b chemical4 date1 0 insect1 a 2
26 location1 b chemical4 date1 0 insect1 b 8
27 location1 b chemical4 date1 0 insect1 c 4
28 location1 b chemical5 date1 0 insect1 a 2
29 location1 b chemical5 date1 0 insect1 b 8
30 location1 b chemical5 date1 0 insect1 c 4
31 location1 c chemical1 date1 0 insect1 a 2
32 location1 c chemical1 date1 0 insect1 b 8
33 location1 c chemical1 date1 0 insect1 c 4
34 location1 c chemical2 date1 0 insect1 a 2
35 location1 c chemical2 date1 0 insect1 b 8
36 location1 c chemical2 date1 0 insect1 c 4
37 location1 c chemical3 date1 0 insect1 a 2
38 location1 c chemical3 date1 0 insect1 b 8
39 location1 c chemical3 date1 0 insect1 c 4
40 location1 c chemical4 date1 0 insect1 a 2
41 location1 c chemical4 date1 0 insect1 b 8
42 location1 c chemical4 date1 0 insect1 c 4
43 location1 c chemical5 date1 0 insect1 a 2
44 location1 c chemical5 date1 0 insect1 b 8
45 location1 c chemical5 date1 0 insect1 c 4
Как только эта проблема будет решена, я бы хотел подгруппировать каждое насекомое из его столбца (я знаю, как сделать это вручную, но не для всех видов насекомых, но это совершенно другой вопрос), а затем запустить обобщенные линейные смешанные моделиоценить влияние обработки на отлов каждого насекомого с указанием даты и местоположения в качестве случайных эффектов.
Я ценю любое понимание этого вопроса.Если мне нужно отредактировать это, чтобы добавить дополнительную информацию, пожалуйста, дайте мне знать, я приложил все усилия, чтобы прояснить структуру моих данных и проблемы.Спасибо.