Как сделать псевдоним для имени столбца? - PullRequest
2 голосов
/ 12 апреля 2019

Это действительно круто, чего я раньше не видел.Вы можете сделать эквивалент mutate, group by и summarize с агрегатом в одной команде.

aggregate(state.x77,
          list(Region = state.region,
               Cold = state.x77[,"Frost"] > 130), mean)

Я хочу повторить это в формате формулы.Я почти у цели.

state <- as.data.frame(state.x77)
state$states <- rownames(state.x77)
state$region <- state.region
aggregate(Population ~ region + (state[,"Frost"] > 130), state, mean)

Я хочу дать новому столбцу имя.Я пытался AS "Cold", но это не сработало.

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

Вы также можете переименовать входные или группирующие переменные, используя cbind в интерфейсе формулы:

aggregate(Population ~ region + cbind(cold = Frost > 130), data=state, mean)
#         region  cold Population
#1     Northeast FALSE  8802.8000
#2         South FALSE  4208.1250
#3 North Central FALSE  7233.8333
#4          West FALSE  4582.5714
#5     Northeast  TRUE  1360.5000
#6 North Central  TRUE  2372.1667
#7          West  TRUE   970.1667

Работает с обеих сторон ~ и с несколькими переменными в одной cbind на LHS:

aggregate(cbind(popn=Population,incm=Income) ~ cbind(cold = Frost > 130), data=state, mean)
#   cold     popn     incm
#1 FALSE 5494.853 4345.412
#2  TRUE 1593.500 4627.875

В противном случае просто добавьте несколько операторов cbind в RHS, если вам нужно справиться с такой возможностью:

aggregate(cbind(popn=Population,incm=Income) ~ cbind(cold = Frost > 130) + 
                                               cbind(st = states), data=state, mean)
#    cold             st  popn incm
#1  FALSE        Alabama  3615 3624
#2   TRUE         Alaska   365 6315
#3  FALSE        Arizona  2212 4530
#4  FALSE       Arkansas  2110 3378
#...
1 голос
/ 12 апреля 2019

Мы можем использовать transform

aggregate(Population ~ region + Cold, transform(state, Cold = Frost > 130),   mean)
#        region  Cold Population
#1     Northeast FALSE  8802.8000
#2         South FALSE  4208.1250
#3 North Central FALSE  7233.8333
#4          West FALSE  4582.5714
#5     Northeast  TRUE  1360.5000
#6 North Central  TRUE  2372.1667
#7          West  TRUE   970.1667
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...