Я пытаюсь научить себя манипулировать и обобщать большие наборы данных.Я хотел бы создать новый фрейм данных и заполнить его сводными данными о годах, связанных с подсчетом наблюдений по местоположению.Я создал примерный фрейм данных ниже.
example.frame <- data.frame(
"Obs.ID" = 1:50,
"Species" = rep("T. rex", 50),
"Site" = c(rep("Big Red", 24), rep("Supermax", 26)),
"Site.ID" = c(rep("1578", 24), rep("0185", 26)),
"Year" = c(1999, 1999, 1999, 2000, 2001, 2002, 2002,
2003, 2003, 2003, 2003, 2003, 2003, 2004,
2004, 2004, 2004, 2004, 2005, 2005, 2005,
2006, 2006, 2007, 1978, 1978, 1978, 1978,
1979, 1979, 1999, 1999, 2000, 2000, 2000,
2000, 2000, 2001, 2001, 2001, 2002, 2003,
2003, 2003, 2003, 2004, 2005, 2006, 2006,
2006),
"Count" = c(0, 1, 5, 0, 3, 1, 1, 0, 1, 3, 2, 1, 1, 0,
0, 1, 2, 3, 1, 1, 5, 0, 1, 2, 8, 11, 7,
2, 3, 1, 1, 0, 2, 5, 6, 0, 1, 2, 1, 1, 0,
0, 2, 3, 1, 2, 0, 1, 2, 1),
stringsAsFactors = FALSE)
Я хотел бы создать новый фрейм данных, обобщающий эти примерные данные и включающий следующие столбцы, определенные ниже.
Line.ID - уникальный последовательный идентификатор строки во фрейме данных, начинающийся с 1
Site - имя сайта из example.data
Total.years - общее количество уникальных лет, связанных с сайтом
Years.3 - количество лет с как минимум тремя связанными счетами для сайта, включая нули
лет.4 - количество лет с как минимум четырьмя связанными подсчетами для сайта, включая нули
лет.5 - количество лет с как минимум пятью или более связанными подсчетами для сайта,включая нули
Total.pos - общее количество лет с хотя бы одним счетом для сайта выше нуля
Pos.3 - количество лет с не менеетри счета для сайта оve ноль
Pos.4 - количество лет, по крайней мере, с четырьмя счетами для сайта выше нуля
Pos.5 - количество лет, по крайней мере, с пятьюрассчитывает для сайта выше нуля
Новый фрейм данных должен выглядеть следующим образом:
new.frame <- data.frame(
"Line.ID" = c(1, 2),
"Site" = c("Big Red", "Supermax"),
"Total.years" = c(9, 10),
"Years.3" = c(4, 5),
"Years.4" = c(2, 3),
"Years.5" = c(2, 1),
"Total.pos" = c(8, 8),
"Pos.3" = c(3, 5),
"Pos.4" = c(1, 2),
"Pos.5" = c(1, 0),
stringsAsFactors = FALSE)
Я думаю, что правильным решением было бы сочетание «summaze» и «group_by»'в dplyr, но я не могу понять, как все это собрать вместе.Я не смог найти ответ на вопрос, который работал бы для этого сценария, поэтому я подумал, что это будет полезно опубликовать.
Последующий вопрос:
Как бы я включил дополнительный слой в созданиеСводная таблица (например, добавление дополнительных видов, встречающихся на тех же участках)?Пример фрейма данных ниже.
example.frame.2 <- data.frame(
"Obs.ID" = 1:80,
"Species" = c(rep("T. rex", 50),
rep("T. bataar", 30)),
"Site" = c(rep("Big Red", 24),
rep("Supermax", 26),
rep("Big Red", 16),
rep("Supermax", 10),
rep("Oz", 4)),
"Site.ID" = c(rep("1578", 24), rep("0185", 26),
rep("1578", 16), rep("0185", 10),
rep("2115", 4)),
"Year" = c(1999, 1999, 1999, 2000, 2001, 2002, 2002,
2003, 2003, 2003, 2003, 2003, 2003, 2004,
2004, 2004, 2004, 2004, 2005, 2005, 2005,
2006, 2006, 2007, 1978, 1978, 1978, 1978,
1979, 1979, 1999, 1999, 2000, 2000, 2000,
2000, 2000, 2001, 2001, 2001, 2002, 2003,
2003, 2003, 2003, 2004, 2005, 2006, 2006,
2006, 2003, 2003, 2003, 2003, 2003, 2004,
2004, 2004, 2004, 2004, 2005, 2005, 2005,
2006, 2006, 2007, 1978, 1978, 1978, 1978,
1979, 1979, 1999, 1999, 2000, 2000, 2012,
2012, 2012, 2013),
"Count" = c(0, 1, 5, 0, 3, 1, 1, 0, 1, 3, 2, 1, 1, 0, 0,
1, 2, 3, 1, 1, 5, 0, 1, 2, 8, 11, 7, 2, 3,
1, 1, 0, 2, 5, 6, 0, 1, 2, 1, 1, 0, 0, 2, 3,
1, 2, 0, 1, 2, 1, 1, 3, 2, 1, 1, 0, 0, 1, 2,
3, 1, 1, 5, 0, 1, 2, 8, 11, 7, 2, 3, 1, 1,
0, 2, 5, 1, 1, 3, 0),
stringsAsFactors = FALSE)
Сводный фрейм данных со слоем вида ниже.
new.frame.2 <- data.frame(
"Line.ID" = c(1, 2, 3, 4, 5),
"Species" = c(rep("T. rex", 2), rep("T. bataar", 3)),
"Site" = c("Big Red", "Supermax", "Big Red", "Supermax", "Oz"),
"Total.years" = c(9, 10, 5, 4, 2),
"Years.3" = c(4, 5, 3, 1, 1),
"Years.4" = c(2, 3, 2, 1, 0),
"Years.5" = c(2, 1, 2, 0, 0),
"Total.pos" = c(8, 8, 5, 4, 1),
"Pos.3" = c(3, 5, 3, 1, 1),
"Pos.4" = c(1, 2, 1, 1, 0),
"Pos.5" = c(1, 0, 1, 0, 0),
stringsAsFactors = FALSE)