Size: a a a

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

2021 January 26

DK

Dm Kb in R (язык программирования)
helby
Привет ребята


Вопрос такой

Креативный, наверное

У меня есть отчетность по плану инвестиций в таком виде как на скрине

мне надо её преобразовать в табличный обычный вид

то есть, чтоб был столбец квартала, столбец номера проекта, источник финасирования, и так далее

Легче ли это будет делать через Р чем вручную в экселе?

Просто опыта преобразования таких документов не было

Возможно кто-то сталкивался

Заранее спасибо
по роду своей деятельности, часто приходится парсить такие таблицы... мой вам совет: если вы не уверены в своих навыках dplyr и stringr(работа с регулярными выражениями), то при сжатых сроках лучше делайте руками... пока excel-ориентированный образ мышления не выветриться из головы и на смену не придет понимание преимуществ "tydy data" - врядли что-то хорошее получиться... тут нужна практика ((
источник

h

helby in R (язык программирования)
Dm Kb
по роду своей деятельности, часто приходится парсить такие таблицы... мой вам совет: если вы не уверены в своих навыках dplyr и stringr(работа с регулярными выражениями), то при сжатых сроках лучше делайте руками... пока excel-ориентированный образ мышления не выветриться из головы и на смену не придет понимание преимуществ "tydy data" - врядли что-то хорошее получиться... тут нужна практика ((
Понял, спасибо за совет
источник

D

Denis in R (язык программирования)
Добрый день!
Я пока совсем начинающий, помогите по возможности с вопросом:
Есть data.table final_eps (см. скрин), в столбце web список уникальных веб адресов (запросов api) которые необходимо спарсить и значение вывести в столбец output.
Когда речь об одном адресе, я обычно применяю fromJSON(my_url) и этого достаточно.
Попробовал в лоб final_eps$output <- fromJSON(final_eps$web) получаю ошибку:
arse error: trailing garbage
         c47a306b88402c" "https://financialmodelingpre
                    (right here) ------^
На сколько я понял fromJSON нельзя применять к вектору.
Можно ли решить задачу не прибегая к циклам ?
источник

DK

Dm Kb in R (язык программирования)
Denis
Добрый день!
Я пока совсем начинающий, помогите по возможности с вопросом:
Есть data.table final_eps (см. скрин), в столбце web список уникальных веб адресов (запросов api) которые необходимо спарсить и значение вывести в столбец output.
Когда речь об одном адресе, я обычно применяю fromJSON(my_url) и этого достаточно.
Попробовал в лоб final_eps$output <- fromJSON(final_eps$web) получаю ошибку:
arse error: trailing garbage
         c47a306b88402c" "https://financialmodelingpre
                    (right here) ------^
На сколько я понял fromJSON нельзя применять к вектору.
Можно ли решить задачу не прибегая к циклам ?
1. без циклов сложно "бегать" по значениям столбцов, смотрите map(), lapply() - отличные векторизированные аналоги циклов
2. ошибка похоже в том, что у вас на  другой стороне не JSONы лежат: может там xml?
источник

IF

Ivan Finaev in R (язык программирования)
Самое забавное, что когда я смотрел последний раз внутрь кода lapply, внутри он был реализован как раз через цикл
источник

DK

Dm Kb in R (язык программирования)
Ivan Finaev
Самое забавное, что когда я смотрел последний раз внутрь кода lapply, внутри он был реализован как раз через цикл
Грамотный цикл не только лишь все могут написать))) зачастую lapply и map будут быстрее цикла for
источник

DK

Dm Kb in R (язык программирования)
Знаю ещё функцию с бекендом, написанном на C+, collapse::dapply() она ещё и многопоточная
источник

D

Denis in R (язык программирования)
Dm Kb
1. без циклов сложно "бегать" по значениям столбцов, смотрите map(), lapply() - отличные векторизированные аналоги циклов
2. ошибка похоже в том, что у вас на  другой стороне не JSONы лежат: может там xml?
Json
источник

AB

Alexey Burnakov in R (язык программирования)
Denis
Json
Посмотрел эту функцию, она не принимает вектор. Либо ищите аналог ф-ии с векторизацией, либо цикл.

Еще (минорно), вы используете DT, но пишите как на датафреймах ) Конечно, дело хозяйское, но DT сделан изначально, чтобы делать всяческие операции внутри синтаксиса, такие как у вас:

library(jsonlite)
library(data.table)
ddt <- data.table(web = c('{"city" : "Zurich"}', '{"city" : "Moscow"}'))
ddt[, output := jsonlite::fromJSON(web), 1:nrow(ddt)]
источник

PU

Philipp Upravitelev in R (язык программирования)
Ivan Finaev
Самое забавное, что когда я смотрел последний раз внутрь кода lapply, внутри он был реализован как раз через цикл
так это просто неявный цикл
источник

DK

Dm Kb in R (язык программирования)
Alexey Burnakov
Посмотрел эту функцию, она не принимает вектор. Либо ищите аналог ф-ии с векторизацией, либо цикл.

Еще (минорно), вы используете DT, но пишите как на датафреймах ) Конечно, дело хозяйское, но DT сделан изначально, чтобы делать всяческие операции внутри синтаксиса, такие как у вас:

library(jsonlite)
library(data.table)
ddt <- data.table(web = c('{"city" : "Zurich"}', '{"city" : "Moscow"}'))
ddt[, output := jsonlite::fromJSON(web), 1:nrow(ddt)]
мне кажется.. табличные процессоры вообще не очень важны для работы с иерархическими структурами типа JSON и XML ... тут нужно больше со списками работать и только потом упаковывать в табличку красивой структуры
источник

D

Denis in R (язык программирования)
Всем спасибо за ответы!
источник

ЮМ

Юта Мата Ссс... in R (язык программирования)
Alexey Burnakov
Посмотрел эту функцию, она не принимает вектор. Либо ищите аналог ф-ии с векторизацией, либо цикл.

Еще (минорно), вы используете DT, но пишите как на датафреймах ) Конечно, дело хозяйское, но DT сделан изначально, чтобы делать всяческие операции внутри синтаксиса, такие как у вас:

library(jsonlite)
library(data.table)
ddt <- data.table(web = c('{"city" : "Zurich"}', '{"city" : "Moscow"}'))
ddt[, output := jsonlite::fromJSON(web), 1:nrow(ddt)]
в продолжении темы векторизации json. Столкнулся не так давно с подобной задачей:
Есть таблица, которая приходит в .csv, в одном из её столбцов упакованный json.  Что-то вроде этого:

df <- data.frame(name = c("some_text"), 
            txt = c("[{'name': 'Resistance', 'value': '0 Ohms', 'unit': '', 'gold': 'true'},{'name': 'Power', 'value': '0.063W, 1/16W', 'unit': '', 'gold': 'true'}]"))

Задача собственно в том, чтобы распарсить упакованный json.

jsonlite::validate(df$txt)

Есть ли векторизованные функции чтения подобных json?
Лучшее что я смог придумать, это заменять все одинарные кавычки на экранированные двойные.
Но может есть способ лучше?

library(tidyverse)
df[1,2] %>% str_replace_all("'", "\"") %>% jsonlite::fromJSON()
источник

PU

Philipp Upravitelev in R (язык программирования)
а stream_in не жрет?
источник

АК

Артём Клевцов... in R (язык программирования)
Юта Мата Ссс
в продолжении темы векторизации json. Столкнулся не так давно с подобной задачей:
Есть таблица, которая приходит в .csv, в одном из её столбцов упакованный json.  Что-то вроде этого:

df <- data.frame(name = c("some_text"), 
            txt = c("[{'name': 'Resistance', 'value': '0 Ohms', 'unit': '', 'gold': 'true'},{'name': 'Power', 'value': '0.063W, 1/16W', 'unit': '', 'gold': 'true'}]"))

Задача собственно в том, чтобы распарсить упакованный json.

jsonlite::validate(df$txt)

Есть ли векторизованные функции чтения подобных json?
Лучшее что я смог придумать, это заменять все одинарные кавычки на экранированные двойные.
Но может есть способ лучше?

library(tidyverse)
df[1,2] %>% str_replace_all("'", "\"") %>% jsonlite::fromJSON()
С одинарными кавычками - это не валидный JSON.
источник

ЮМ

Юта Мата Ссс... in R (язык программирования)
Philipp Upravitelev
а stream_in не жрет?
неа
источник

ЮМ

Юта Мата Ссс... in R (язык программирования)
Артём Клевцов
С одинарными кавычками - это не валидный JSON.
я понимаю, и это вроде как даже зафиксировано в RFC 4627.
Но как-то ведь на «той стороне» его генерируют и явно не ручками. Поэтому я подумал, что может есть ещё какие-то стандарты, уточнения, лазейки, и т.п. и соответственно способы обработки.
Пока вроде бы моё решение других проблем, кроме как долгой обработки, не создаёт.
Попробую выяснить как они этот json генерируют.
источник

АК

Артём Клевцов... in R (язык программирования)
Юта Мата Ссс
в продолжении темы векторизации json. Столкнулся не так давно с подобной задачей:
Есть таблица, которая приходит в .csv, в одном из её столбцов упакованный json.  Что-то вроде этого:

df <- data.frame(name = c("some_text"), 
            txt = c("[{'name': 'Resistance', 'value': '0 Ohms', 'unit': '', 'gold': 'true'},{'name': 'Power', 'value': '0.063W, 1/16W', 'unit': '', 'gold': 'true'}]"))

Задача собственно в том, чтобы распарсить упакованный json.

jsonlite::validate(df$txt)

Есть ли векторизованные функции чтения подобных json?
Лучшее что я смог придумать, это заменять все одинарные кавычки на экранированные двойные.
Но может есть способ лучше?

library(tidyverse)
df[1,2] %>% str_replace_all("'", "\"") %>% jsonlite::fromJSON()
Убедись, что не реплейсишь regex. Обработка регулярок часто сильно дольше.
источник

ЮМ

Юта Мата Ссс... in R (язык программирования)
ок, спасибо
источник

ГД

Григорий Демин... in R (язык программирования)
Вопрос скорее по статистике. Есть набор точек продаж. Есть продажи в каждой точке до и после события. Я делаю парный тест по этим точкам, значимости нет. Однако, если посчитать относительный рост по каждой точки и сравнить этот средний рост с  единицей, то относительный рост значимо больше 1. С единицей сравнивал не только т.тестом, но и для надежности бутстрэпом...  Есть идеи, как это проинтерпретировать на человеческом языке для людей, которые не знают статистики? Да и как вообще такое может быть...
источник