Size: a a a

R (язык программирования)

2021 March 27

М

Марк in R (язык программирования)
Иван Поздняков
но вот как красиво сделать это на датафрейме со строковыми колонками (без удаления их, оставляя на месте) кроме как через across() я не знаю
Вот да, из за первого строкового столбца у меня и не получается. Ругается на символьный вектор)
источник

М

Марк in R (язык программирования)
Иван Поздняков
тут еще вот это:
mtcars_dt <- as.data.table(mtcars)
Это я понял))
источник

М

Марк in R (язык программирования)
Иван Поздняков
но вот как красиво сделать это на датафрейме со строковыми колонками (без удаления их, оставляя на месте) кроме как через across() я не знаю
Придется видимо отдирать символьный столбец, и потом клеить обратно)
источник

М

Марк in R (язык программирования)
Nikolai Neustroev
А чем цикл смущает?
ни разу не юзал циклы в R🤷‍♂️
источник

ДВ

Дмитрий Володин... in R (язык программирования)
Иван Поздняков
но вот как красиво сделать это на датафрейме со строковыми колонками (без удаления их, оставляя на месте) кроме как через across() я не знаю
А в лямбду проверку нельзя разве запихать? Типа is.numeric(x)[1]
источник

ИП

Иван Поздняков... in R (язык программирования)
Марк
Вот да, из за первого строкового столбца у меня и не получается. Ругается на символьный вектор)
ну вот можно так:
iris_dt[, lapply(.SD, function(x) x/sum(x)), .SDcols = which(sapply(iris_dt, is.numeric))]
но это будет выкидывать не нумерик
источник

ИП

Иван Поздняков... in R (язык программирования)
Дмитрий Володин
А в лямбду проверку нельзя разве запихать? Типа is.numeric(x)[1]
вот кстати можно просто расписать подробнее и при проверке тупо оставлять колонку
iris_dt[, lapply(.SD, function(x) if(!is.numeric(x)) return(x) else x/sum(x))]
источник

М

Марк in R (язык программирования)
Иван Поздняков
ну вот можно так:
iris_dt[, lapply(.SD, function(x) x/sum(x)), .SDcols = which(sapply(iris_dt, is.numeric))]
но это будет выкидывать не нумерик
В этом случае, получается, строковую колонку автоматом выкинуло)
источник

М

Марк in R (язык программирования)
Иван Поздняков
вот кстати можно просто расписать подробнее и при проверке тупо оставлять колонку
iris_dt[, lapply(.SD, function(x) if(!is.numeric(x)) return(x) else x/sum(x))]
Вооо, а вот это то что надо) Спасибо!)
источник

a

aGricolaMZ in R (язык программирования)
Переслано от aGricolaMZ
Всем привет, в это воскресенье скринкаст будет в 16:00. Будем анализировать данные ООН!

https://zoom.us/j/95456935119?pwd=UERad2lCVEpIK2tvN1I4YURRL3VkQT09
источник

М

Марк in R (язык программирования)
Тааак, еще вопрос) А как к большому кол-ву столбцов в data.table применить однотипную группирующую функцию?)) В dplyr для этого вроде accros как раз и есть, а что в data.table?))
источник

ИП

Иван Поздняков... in R (язык программирования)
Марк
Тааак, еще вопрос) А как к большому кол-ву столбцов в data.table применить однотипную группирующую функцию?)) В dplyr для этого вроде accros как раз и есть, а что в data.table?))
я не очень понял, что значит применить однотипную группирующую функцию
источник

М

Марк in R (язык программирования)
Иван Поздняков
я не очень понял, что значит применить однотипную группирующую функцию
Вот благодаря Вам я посчитал доли от сумм. Теперь я через функцию data.table::cube хочу сделать последней строкой итоговый столбец с суммой всех долей. Мне надо для этого все 12 столбцов перечислить и ко всем применить функцию sum.
источник

М

Марк in R (язык программирования)
Марк
Вот благодаря Вам я посчитал доли от сумм. Теперь я через функцию data.table::cube хочу сделать последней строкой итоговый столбец с суммой всех долей. Мне надо для этого все 12 столбцов перечислить и ко всем применить функцию sum.
И вот в dplyr вроде функция accross есть для этого, чтобы не перечислять все столбцы, а автоматом ко всем применить sum
источник

М

Марк in R (язык программирования)
А как в data.table порешать эту проблему можно?)
источник

ИП

Иван Поздняков... in R (язык программирования)
вообще, если честно, я бы перевернул просто сначала в длинный формат, сделал бы все обычной группировкой (group_by, by = или даже cube()), а потом бы расширил обратно
источник

М

Марк in R (язык программирования)
Иван Поздняков
вообще, если честно, я бы перевернул просто сначала в длинный формат, сделал бы все обычной группировкой (group_by, by = или даже cube()), а потом бы расширил обратно
аа, понял, можно же cube один раз применить к длинному столбцу. Спасибо, сейчас пойду пробовать)
источник

PD

Pavel Demin in R (язык программирования)
Марк
А как в data.table порешать эту проблему можно?)
Вообще, в дата.тейбл есть ключевое слово .SD - по дефолту оно означает все колонки, но можно указать .SDcols, чтобы явно перечислить нужные колонки.

В целом, чтобы добавить вычисление  в качестве последней строки, я бы сделал rbind и все.
Я не у компа, но что-то типа
rbind(dt, dt[, lapply(.SD, sum)])
источник

М

Марк in R (язык программирования)
Pavel Demin
Вообще, в дата.тейбл есть ключевое слово .SD - по дефолту оно означает все колонки, но можно указать .SDcols, чтобы явно перечислить нужные колонки.

В целом, чтобы добавить вычисление  в качестве последней строки, я бы сделал rbind и все.
Я не у компа, но что-то типа
rbind(dt, dt[, lapply(.SD, sum)])
Спс, тоже попробую, как приду домой)
источник

М

Марк in R (язык программирования)
Pavel Demin
Вообще, в дата.тейбл есть ключевое слово .SD - по дефолту оно означает все колонки, но можно указать .SDcols, чтобы явно перечислить нужные колонки.

В целом, чтобы добавить вычисление  в качестве последней строки, я бы сделал rbind и все.
Я не у компа, но что-то типа
rbind(dt, dt[, lapply(.SD, sum)])
Попробовал с чуть другим примером, и чего то не получается. Вот, например, создание столбца с общим итогом (ну надо сделать мне "сводную таблицу как в экселе" из 2 млн строк 😂). Первая строка - получается то что нужно, а во второй говорит, что аргумент FUN пропущен ) То есть мой sum ) То есть как именно .SDcols то юзануть?)
источник