Как экспортировать фрейм данных R в таблицу Power Query - PullRequest
6 голосов
/ 08 мая 2019

Я использую скрипт R в Power Query, чтобы выполнить некоторые преобразования данных и вернуть масштабированную таблицу. Мой код R такой:

# 'dataset' contém os dados de entrada neste script

library(dplyr)

df_normal <- log(dataset+1) %>%
select(c(2:4)) %>%
scale
df_normal <-cbind(dataset[,c(1)], df_normal)
output <- df_normal 

Это нормально работает в R Studio, и я получаю фрейм данных df_normal, как и ожидалось.

Однако в Power Query я получаю пустую таблицу!

r

Как экспортировать кадр данных в таблицу?

1 Ответ

2 голосов
/ 11 мая 2019

Кажется странным, что это не может вернуться.Быстрый взгляд онлайн дал это 3-минутное видео на YouTube , которое использует тот же метод, который вы используете.При дальнейшем поиске источника можно встретить документацию Microsoft , которая дает возможную причину возникновения проблемы.

При подготовке и запуске сценария R вВ Power BI Desktop есть несколько ограничений:

  • Импортируются только фреймы данных, поэтому убедитесь, что данные, которые вы хотите импортировать в Power BI, представлены в фрейме данных

  • Столбцы с типом Complex и Vector не импортируются и заменяются значениями ошибок в созданной таблице

Они кажутся наиболееочевидные причины.Ставка на то, что в вашем наборе данных нет сложных столбцов, я думаю, что предыдущая причина, вероятно, является причиной.Быстрое воссоздание вашего набора данных показывает, что функция scale превращает ваш набор данных в объект класса matrix.Это сохраняется cbind, и, как таковой вывод, относится к классу matrix, а не data.frame.

>dataset <- as.data.frame(abs(matrix(rnorm(1000),ncol=4)))
>class(dataset)
[1]"data.frame"
>library(dplyr)
>df_normal <- log(dataset + 1) %>%
>    select(c(2:4)) %>%
>    scale 
>class(df_normal)
[1] "matrix"
>df_normal <- cbind(dataset[,1], df_normal)
>output <- df_normal
>class(output)
[1] "matrix"

Простое исправление, похоже, добавляет output <- as.data.frame(output), так каклиния с документацией PowerBI.Возможно, в конце понадобится return.Добавление строки в конце скрипта с указанием output должно исправить это.

Edit

Для пояснения, я полагаю, что следующий отредактированный скрипт (ваш) должен вернуть ожидаемые данные

# 'dataset' contém os dados de entrada neste script

library(dplyr)

df_normal <- log(dataset+1) %>%
select(c(2:4)) %>%
scale
df_normal <-cbind(dataset[,c(1)], df_normal)
output <- as.data.frame(df_normal)
#output  ##This line might be needed without the first comment 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...