GOOGLE ADS

воскресенье, 10 апреля 2022 г.

Добавить уровни в одном столбце для каждого уровня фактора в другом столбце

У меня есть такой набор данных:

dat<- data.frame(var1= c(1:15), 
var2= c(rep("A", 4), "control", rep("B", 4),"control", rep("C", 4), "control"),
var3= rep(c("full","full", "half", "half", "control"),3),
value= c(12, 62, 60, 61, 83, 97,1, 22, 99, 47, 63, 49, 25, 81, 26))
dat

Я для каждого level(var3)=="control"хочу добавить эти строки на каждый уровень dat$var2. Фрейм данных результата будет выглядеть так:

res<- data.frame(var1= c(1:21), 
var2= c(rep("A", 7), rep("B", 7), rep("C", 7)),
var3= rep(c("full","full", "half", "half", "control","control", "control"),3),
value= c(12, 62, 60, 61, 83, 47, 26,97,1, 22, 99,83, 47, 26, 63, 49, 25, 81,83, 47,26))
res


Решение проблемы

Вот один из вариантов

library(dplyr)
datsub <- dat %>%
filter(var3 == "control") %>%
select(var3, value)
out <- dat %>%
filter(var3!= 'control') %>%
group_by(var2) %>%
group_modify(~.x %>% bind_rows(datsub)) %>%
ungroup %>%
mutate(var1 = row_number()) %>%
select(names(dat))

-проверка с ожидаемым результатом

> all.equal(out, res, check.attributes = FALSE)
[1] TRUE

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...