Прилагане на функция към групирана променлива с помощта на dplyr?

Тази публикация Learning R прилага функция към колона въз основа на група променливи:

Данните изглеждат така:

 NAME, variable, value
 1   , GROUP1, 10
 2   , GROUP1, 20
 3   , GROUP2, 20
 4   , GROUP2, 30

Мога да използвам тази функция за мащабиране по променлива:

nba.m <- ddply(nba.m, .(variable), transform, rescale = rescale(value))

Как бих изпълнил същото изчисление с помощта на пакета dplyr? Опитах:

nba.m <- nba.m %>%group_by(variable) %>% mutate(rescale=rescale(as.numeric(value)))

Това обаче мащабира цялата колона "стойност" без групиране по променлива. Благодаря, Мат


person Matthew David Jankowski    schedule 01.06.2015    source източник
comment
Опитайте dplyr::mutate(rescale=   -  person akrun    schedule 01.06.2015
comment
Откъде идва rescale()? Изглежда, че работи добре с мащаба: nba.m %>%group_by(variable) %>% mutate(rescale=scale(as.numeric(value))) Какъв резултат получавате? Имате ли заредени и dplyr, и plyr? Първо ли заредихте plyr?   -  person MrFlick    schedule 01.06.2015
comment
@MrFlick След като заредя ggplot2, се зарежда някакъв пакет с мащаби на hadleyverse, който има функция rescale; Предполагам, че това е всичко. Трябва да е, тъй като ggplot2 е в заглавието на публикацията, към която OP е свързан   -  person Frank    schedule 01.06.2015


Отговори (1)


Това вероятно е причинено от маскирането на обекти в dplyr от plyr. Ето защо винаги трябва да се обаждате на library(dplyr) след обаждане на library(plyr). Ако не го направите, трябва да получите следното предупреждение:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
You have loaded plyr after dplyr - this is likely to cause problems.
If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
library(plyr); library(dplyr)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Attaching package: ‘plyr’

The following objects are masked from ‘package:dplyr’:

    arrange, count, desc, failwith, id, mutate, rename, summarise, summarize

Така че можете да срещнете подобни проблеми и с тези други функции. Разрешете го, като прикачите plyr преди dplyr или както посочва @akrun: изрично препращане към функцията от пакета, който искате, в този случай чрез префикс с dplyr::.

Имайте предвид, че можете да проверите реда на прикачените пакети с search() (в този случай прикачих dplyr след plyr):

search()
 [1] ".GlobalEnv"        "package:dplyr"     "package:plyr"      "tools:rstudio"     "package:stats"     "package:graphics"  "package:grDevices" "package:utils"    
 [9] "package:datasets"  "package:methods"   "Autoloads"         "package:base"    
person ivyleavedtoadflax    schedule 02.06.2015