Кто-нибудь знает, возможно ли использовать переменную в одном фрейме данных (в моем случае это «развернуть» фрейм данных) для создания переменной в другом фрейме данных?
Например, у меня есть два кадра данных:
df1:
deploy <- data.frame(ID = c("20180101_HH1_1_1", "20180101_HH1_1_2", "20180101_HH1_1_3"),
Site_Depth = c(42, 93, 40), Num_Depth_Bins_Required = c(5, 100, 4),
Percent_Column_in_each_bin = c(20, 10, 25))
df2:
sp.c <- data.frame(species = c("RR", "GS", "GT", "BR", "RS", "BA", "GS", "RS", "SH", "RR"),
ct = c(25, 66, 1, 12, 30, 6, 1, 22, 500, 6),
percent_dist_from_surf = c(11, 15, 33, 68, 71, 100, 2, 65, 5, 42))
Я хочу создать новые столбцы в df2 который присваивает каждому виду и подсчитывает в корзину на основе Percent_Column_in_each_bin для каждого идентификатора. Например, в 20180101_HH1_1_3 будет 4 корзины, каждая из которых составляет 25% столбца, а все виды, которые находятся в пределах 0-25% столбца (в df2), будут в корзине 1, а виды в пределах 25-50% от столбец будет в глубине bin 2, и так далее. Мне кажется, что это выглядит так:
i.want.this <- data.frame(species = c("RR", "GS", "GT", "BR", "RS", "BA", "GS", "RS", "SH", "RR"),
ct = c(25, 66, 1, 12, 30, 6, 1, 22, 500, 6),
percent_dist_from_surf = c(11, 15, 33, 68, 71, 100, 2, 65, 5, 42),
'20180101_HH1_1_1_Bin' = c(1, 1, 2, 4, 4, 5, 1, 4, 1, 3),
'20180101_HH1_1_2_Bin' = c(2, 2, 4, 7, 8, 10, 1, 7, 1, 5),
'20180101_HH1_1_3_Bin' = c(1, 1, 2, 3, 3, 4, 1, 3, 1, 2))
Я довольно новичок в R и не знаю, как этого добиться. Мне нужно сделать это для более чем 100 идентификаторов (все с различной глубиной, количеством ячеек глубины и процентом столбца в каждой ячейке), поэтому я надеялся, что мне не нужно делать их все вручную. Я пытался изменить в dplyr, но я не могу получить его из двух разных фреймов данных. Я также пробовал операторы ifelse, но мне нужно было бы запускать оператор ifelse для каждого идентификатора в отдельности.
Я не знаю, возможно ли то, что я пытаюсь сделать, но я ценю обратную связь. Заранее спасибо!
Редактировать: моя конечная цель - найти максимальное количество (max ct) для каждого вида в каждой ячейке для каждого идентификатора. То, что я делал, чтобы найти это (используя корзины, сгенерированные с предложениями от @Ben), использует dplyr для нарезки и определения максимального идентификатора, например:
20180101_HH1_1_1 <- sp.c %>%
group_by(20180101_HH1_1_1, species) %>%
arrange(desc(ct)) %>%
slice(1) %>%
group_by(20180101_HH1_1_1) %>%
mutate(Count_Total_Per_Bin = sum(ct)) %>%
group_by(species, add=TRUE) %>%
mutate(species_percent_of_total_in_bin =
paste0((100*ct/Count_Total_Per_Bin) %>%
mutate(ID= "20180101_HH1_1_1 ") %>%
ungroup()
, но я должен сделать это более 100 идентификаторов. Мой желаемый результат будет что-то вроде:
end.goal <- data.frame(ID = c(rep("20180101_HH1_1_1", 8)),
species = c("RR", "GS", "SH", "GT", "RR", "BR", "RS", "BA"),
bin = c(1, 1, 1, 2, 3, 4, 4, 5),
Max_count_of_each_species_in_each_bin = c(11, 66, 500, 1, 6, 12, 30, 6),
percent_dist_from_surf = c(11, 15, 5, 33, 42, 68, 71, 100),
percent_each_species_max_in_each_bin = c((11/577)*100, (66/577)*100, (500/577)*100, 100, 100, (12/42)*100, (30/42)*100, 100))
Я думал, что, ответив на первоначальный вопрос, я смогу добраться до этого, но теперь я вижу, что вам еще многое нужно сделать, чтобы получить это для каждого идентификатора. ,