У меня есть dataframe, подобный этомуScale все значения в зависимости от группы
ID <- c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3)
p1 <- c(21000, 23400, 26800, 2345, 23464, 34563, 456433, 56543, 34543,3524, 353, 3432, 4542, 6343, 4534)
p2 <- c(234235, 2342342, 32, 23432, 23423, 2342342, 34, 2343, 23434, 23434, 34, 234, 2343, 34, 5)
my.df <- data.frame(ID, p1, p2)
Теперь я хотел бы, чтобы масштабировать значения в p1 и p2 в зависимости от их ID. Таким образом, весь столбец будет масштабироваться, как при использовании функции tapply(), но масштабирование выполняется один раз для всех значений для идентификатора 1, затем для всех значений ID 2 и т. Д. То же самое для масштабирования p2. Новый блок данных должен состоять из масштабированных значений.
Я уже пытался
df_scaled <- ddply(my.df, my.df$ID, scale(my.df$p1))
, но получаю сообщение об ошибке
.fun is not a function.
Спасибо за вашу помощь!
или более общий 'my.df%>% group_by (ID)%>% mutate_at (vars (matches ('p')), funs (scale))' – Sotos
Спасибо. Он работает на фрейме данных, который я привел здесь в качестве примера, но с реальным фреймворком данных я получаю сообщение об ошибке: неожиданный «=» в «scaled_data <- predictortable_panel%>% group_by (predortable_panel $ ID)%>% mutate (predortable_panel $ p1 = «--- любая идея, почему она не примет знак равенства? – GNee
Не следует повторять имя фрейма данных внутри функций' dplyr' (т. е. удалить 'predictortable_panel $'); 'mutate (p1 = .. .' и т. д. – mpjdem