Tidyverse, выполнить математическую функцию, используя mutate_all - PullRequest
1 голос
/ 18 марта 2020

Я пытаюсь выяснить, как выполнить базовую c математическую функцию для нескольких столбцов, используя mutate_all или mutate_at. Мне нужно преобразовать число в десятичную (разделить каждый столбец на 10). Это вторая часть после того, как я использую summarise_at для получения средних значений для каждого столбца. cn <- c ("tmin_1", "tmin_2", "tmin_3", "tmin_4", "tmin_5", "tmin_6", "tmin_7", "tmin_8", "tmin_9", "tmin_10", "tmin_11" , "tmin_12") </p>

    a<-data.frame(replicate(12,sample(1:10,6,rep=TRUE)))
    names(a)[1:12]<-cn
    a$"S"<-c("A","A","A","B","B","B")

    a2 <- a %>% 
        filter(S == "A") %>% 
        summarise_at(vars(tmin_1:tmin_12), funs(mean))

Работает до здесь. Когда в конце я добавляю «mutate_all (y = y / 10)», он не работает.

Приведенный выше код возвращает новый объект с 1 строкой и 12 столбцами, что я и хочу. Столбцы содержат средние значения. Теперь мне просто нужно разделить каждое значение на 10, чтобы преобразовать число. Я попытался mutate_all (), но он не работает для меня. Я не уверен, как выполнить /10 для каждого столбца. Я не знаю, как ссылаться на столбцы.

ПО связанной заметке, может ли кто-нибудь предоставить более простой способ создания приведенного выше примера фрейма данных? Я хотел бы создать таблицу случайных чисел в нескольких столбцах, назначить символы одному столбцу и присвоить каждому столбцу имена в одном наборе каналов.

Спасибо!

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Столбец 'S' равен character, поэтому может потребоваться mutate_if

library(dplyr)
a %>%
    filter(S == "A") %>%
    mutate_if(is.numeric, ~ ./10)

Если он находится на 'a2'

a2 %>% 
    mutate_all(list(y =  ~ ./10))
0 голосов
/ 18 марта 2020

Обратите внимание, что база R часто позволяет легко применять скалярные операции к векторам данных. Например, ваш df a, который имеет 12 числовых c столбцов и один символьный столбец в конце. Затем вы просто делите число c столбцов на 10. Эта базовая операция даст желаемый результат:

a[ , 1:12] <- a[ , 1:12] / 10

Если столбец символов отсутствует, скалярная операция будет просто:

a <- a / 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...