Dplyr: переименование добавленных столбцов в таблице с помощью rename (), работающей не так, как задумано - PullRequest
0 голосов
/ 03 октября 2019

Итак, я пытаюсь переименовать столбцы для таблицы, которая отображает сводную статистику в моем коде R. Но для столбцов, которые я добавляю в таблицу, я не могу изменить их имена полностью

Вот код для получения медианного минимума и максимума из кадра данных 'UScereal':

UScereal %>% #get median
  group_by(mfr) %>%
  summarise(fibre = median(fibre)) -> fib_med

UScereal %>% #get maximum
  group_by(mfr) %>%
  summarise(fibre = max(fibre)) -> maximum
maximum %>% select(max = fibre) -> maximum #remove first column and rename 2nd column as 'max'

UScereal %>%
  group_by(mfr) %>% #get minimum
  summarise(fibre = min(fibre)) -> minimum
minimum %>% select(min = fibre) -> minimum #remove first column and rename 2nd column as 'min'

fib_med <- add_column(fib_med, maximum, minimum) #append the max and min to the first tible

И вот два разных утверждения, с которыми я пытался переименовать столбцы:

fib_med <- fib_med %>% rename(fib_med, manufacturer = mfr, median_fiber = fibre, max_fiber = maximum$max, fiber_minimum = minimum$min) 
#throws Error: All arguments must be named


fib_med <- fib_med %>% rename(manufacturer = mfr, median = fibre) #works fine

fib_med

Я заметил, что когда я звоню colnames(fib_med), я получаю желаемый результат

> colnames(fib_med)
[1] "manufacturer" "median"       "maximum"      "minimum"   

Но когда яраспечатать / просмотреть таблицу, я получаю «максимум $ max» вместо «максимум», и то же самое для минимума.

> fib_med
# A tibble: 6 x 4
  manufacturer median maximum$max minimum$min
  <fct>         <dbl>       <dbl>       <dbl>
1 G              1.8         5           0   
2 K              1.33       28           0   
3 N              5.97       30.3         4.48
4 P              7.46       12           0   
5 Q              1           4           0   
6 R              1.33        5.97        0   

Это странно, потому что я добавил максимальный и минимальный столбцы из другого тиббла? И есть ли способ исправить это, чтобы имена столбцов были следующими: «производитель», «медиана», «максимум», «минимум»?

РЕДАКТИРОВАТЬ: решено. Работали как акрун, так и йод решения. Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 октября 2019
fib_med <- fib_med %>% rename(fib_med, manufacturer = mfr, median_fiber = fibre, max_fiber = maximum$max, fiber_minimum = minimum$min) 
#throws Error: All arguments must be named

Этот не работает, потому что первым аргументом в вашем переименовании является набор данных, но вы уже использовали %>%, который помещает левую часть оператора в качестве первого аргумента RHS.

Вы можете решить проблему максимального $ max и минимального $ min, просто указав нужный столбец вместо использования select:

maximum$fibre -> maximum

и то же самое для минимума. Теперь у вас не будет проблем.

Другими словами:

UScereal %>% #get median
    group_by(mfr) %>%
    summarise(fibre = median(fibre)) -> fib_med

UScereal %>% #get maximum
    group_by(mfr) %>%
    summarise(fibre = max(fibre)) -> maximum
maximum$fibre -> maximum #remove first column and rename 2nd column as 'max'

UScereal %>%
    group_by(mfr) %>% #get minimum
    summarise(fibre = min(fibre)) -> minimum
minimum$fibre -> minimum #remove first column and rename 2nd column as 'min'

fib_med <- tibble::add_column(fib_med, maximum, minimum)

fib_med
# A tibble: 6 x 4
  mfr   fibre maximum minimum
  <fct> <dbl>   <dbl>   <dbl>
1 G      1.8     5       0   
2 K      1.33   28       0   
3 N      5.97   30.3     4.48
4 P      7.46   12       0   
5 Q      1       4       0   
6 R      1.33    5.97    0

Хотя, честно говоря, это очень окольный способ сделать это.

Это гораздо большепросто сделать это:

fib_med<-UScereal %>% group_by(mfr) %>% 
  summarize(median=median(fibre),
            maximum=max(fibre),
            mininum=min(fibre))

Что дает тот же результат.

0 голосов
/ 03 октября 2019

Набор данных не является регулярным. Если мы проверим str(fib_med), это показывает, что столбцы являются действительными data.frame с одним столбцом

fib_med <- do.call(data.frame, fib_med)

и теперь с последним шагом

fib_med <- fib_med %>%
    rename(manufacturer = mfr, median = fibre) 
fib_med
#  manufacturer   median       max      min
#1            G 1.800000  5.000000 0.000000
#2            K 1.333333 28.000000 0.000000
#3            N 5.970149 30.303030 4.477612
#4            P 7.462687 12.000000 0.000000
#5            Q 1.000000  4.000000 0.000000
#6            R 1.333333  5.970149 0.000000
...