R/PowerBIAPI问题:当源数据帧的结构不一致时,如何为结果数据帧中缺少的列分配NA

R/PowerBIAPI问题:当源数据帧的结构不一致时,如何为结果数据帧中缺少的列分配NA,r,dataframe,na,powerbi-api,R,Dataframe,Na,Powerbi Api,我正在为活动数据解析PowerBIRESTAPI中的数据。这个API函数的方式是:同一个端点今天可能返回10个字段的数据,明天可能返回15个字段的数据。我的目标是运行一个定时进程,该进程将提取每日数据(比如说提取到SQL表中)。我用我需要的列预定义了一个输出数据框。但我正在寻找一种处理这种情况的方法,比如说,我在输出数据帧中定义了12列,而在今天的RESTAPI提取中,结果不包含这12列中的1列。我想将它们作为NA(或空字符串)来源代码。在R怎么做?下面是我正在使用的一段代码: response

我正在为活动数据解析PowerBIRESTAPI中的数据。这个API函数的方式是:同一个端点今天可能返回10个字段的数据,明天可能返回15个字段的数据。我的目标是运行一个定时进程,该进程将提取每日数据(比如说提取到SQL表中)。我用我需要的列预定义了一个输出数据框。但我正在寻找一种处理这种情况的方法,比如说,我在输出数据帧中定义了12列,而在今天的RESTAPI提取中,结果不包含这12列中的1列。我想将它们作为NA(或空字符串)来源代码。在R怎么做?下面是我正在使用的一段代码:

response<-httr::GET(url=RESTEndPoint,config=httpHeader)
parsedResp<-httr::content(response, "text",encoding = "UTF- 
8")%>%jsonlite::fromJSON(flatten = TRUE)
  
df<-as.data.frame(parsedResp$activityEventEntities)
outputDF<-df %>%
  dplyr::select(
    LogID='Id'
    ,CreationTimeD='CreationTime'
    ,Operation='Operation'
    ,OrganizationID='OrganizationId'
    
  )

response在不查看数据的情况下,不确定这是否是问题的解决方案<代码>交付
是交付的示例。您还可以创建一个包含所需列的空数据框,称为“data\u delivery\u cools\u needed”,并在以后将其删除

library(data.table)
library(tidyverse)

coos_needed <- c('a', 'b', 'c')

delivery_1 <- data.frame(a = 1, b = 2, x = 3, z = 4)
delivery_2 <- data.frame(c = 1)
delivery_3 <- data.frame(a = 1, b = 2, c = 3)
delivery_4 <- data.frame(f = 5)

# Create a list of all deliveries

all_deliveries <- mget(ls(pattern = "^delivery_"))

# Combine everything into one - fill = TRUE

all_deliveries_data_frame <- rbindlist(all_deliveries, fill = TRUE, idcol = "delivery_file")

final_data <- all_deliveries_data_frame %>% select(cols_needed)
库(data.table)
图书馆(tidyverse)

coos_needed不确定这是否是在没有看到数据的情况下解决问题的方法<代码>交付
是交付的示例。您还可以创建一个包含所需列的空数据框,称为“data\u delivery\u cools\u needed”,并在以后将其删除

library(data.table)
library(tidyverse)

coos_needed <- c('a', 'b', 'c')

delivery_1 <- data.frame(a = 1, b = 2, x = 3, z = 4)
delivery_2 <- data.frame(c = 1)
delivery_3 <- data.frame(a = 1, b = 2, c = 3)
delivery_4 <- data.frame(f = 5)

# Create a list of all deliveries

all_deliveries <- mget(ls(pattern = "^delivery_"))

# Combine everything into one - fill = TRUE

all_deliveries_data_frame <- rbindlist(all_deliveries, fill = TRUE, idcol = "delivery_file")

final_data <- all_deliveries_data_frame %>% select(cols_needed)
库(data.table)
图书馆(tidyverse)

如果您知道变量的最大数量,并且知道希望重命名它们的名称,那么这是否有效<代码>名称
,一个包含所有可能名称的字符向量重命名,一个包含所有名称重命名的字符向量。请注意,这两个序列必须相同
outputDF%选择(其中(名称(df)%in%names))
然后,要根据您的喜好替换变量名称,
colnames(outputDF),感谢您的回复!这可能也行得通,但我可以使用bind_rows()解决这个问题,方法是用我想要的列预定义一个空数据框,然后在循环中追加提取的行。最后,我可以做一个dplyr::select来选择我需要的列并对它们进行重命名。如果您知道变量的最大数量,并且知道希望重命名它们的内容,那么这是否有效<代码>名称
,一个包含所有可能名称的字符向量重命名,一个包含所有名称重命名的字符向量。请注意,这两个序列必须相同
outputDF%选择(其中(名称(df)%in%names))
然后,要根据您的喜好替换变量名称,
colnames(outputDF),感谢您的回复!这可能也行得通,但我可以使用bind_rows()解决这个问题,方法是用我想要的列预定义一个空数据框,然后在循环中追加提取的行。最后,我可以做一个dplyr::select来选择我需要的列并重命名它们。