Problem with `mutate()` input ` (dplyr_error)

Hi

I am using R to get unsampled data from Google Analytics using googleAnalyticsR and tidyverse libraries.

Would you be able please to help me understand how to fix the error I get?

I get the following error:

<error/dplyr_error>
Problem with mutate() input user1.
x object 'userType' is not found
i Input user1 is userType.
Backtrace:

  1. googleAnalyticsR::google_analytics(...)
  2. googleAnalyticsR:::anti_sample(...)
  3. googleAnalyticsR:::aggregateGAData(out, agg_names = agg_cols)
  4. dplyr::select(., !!!mean_selects)
  5. dplyr::group_by(., !!!dots)
  6. dplyr::group_by_prepare(.data, ..., .add = .add)
  7. dplyr:::add_computed_columns(.data, new_groups)
  8. dplyr:::mutate_cols(.data, !!!vars)

My full code is below:

library(googleAnalyticsR)
library(tidyverse)


ga_auth()

## get your accounts
account_list <- ga_account_list()

account_list



## View account_list and pick the viewId you want to extract data from. 
ga_view_id <- 11111111



# date range
date_start <- "2020-08-15"
date_end <- "2020-11-15"


#retrieve list of available dimensions
ga_dim <- ga_meta()
head(ga_dim)

#Unsampled data

                       

#GA will aggregate the data based on the supplied dimensions. So, dimensions
#need to be carefully selected to avoid miss-aggregation, e.g., collecting deviceCategory
#(desktop/mobile/tablet)at the same request with movileDeviceModel will return data 
#from mobile/tablet only (API will omit desktop data) 
#Using a list-of-list allows us to control the dimensions supplied to the API (maximum of six 
#dimensions allowed for each list as the API requests provided with the transactionId as the key)

dimension_list <- list('user'=list('userType','deviceCategory','city',
                                   'browser','operatingSystem'),
                       'user2'=list('visitLength','userGender','userAgeBracket'),
                       'seasonality'=list('day','dayOfWeek','yearWeek'))

#identify list of metrics

metric_list <- c('transactionRevenue','transactions','avgSessionDuration','users','bounceRate','avgPageLoadTime',
'avgTimeOnPage', 'sessions', 'avgServerConnectionTime','avgDomainLookupTime')


#initiate the data frame to store the merged dataset

ga_data <- data.frame()

for (i in 1:length(dimension_list)) {
  ga_request <- google_analytics(viewId = ga_view_id,
                                 date_range= c(date_start, date_end),
                                 metrics=metric_list,
                                 dimensions = c('dimension1',unlist(dimension_list[i])),
                                 anti_sample = TRUE)
  
  if (i == 1) {
    #the first output will be set as a base
    ga_data <- ga_request
  } else {
    #merge the subsequent output with the base using a specific key,
    #(in this case: clientId)
    #first, need to remove the metrics column to avoid duplicated metrics
    #column name (suffix: _x & _y)
    ga_request <- ga_request %>% select(-metric_list)
    ga_data <- ga_data %>% left_join(ga_request, by = 'dimension1')
  }
}

ga_data```
dimension_list <- list('user'=list('userType'))
c('dimension1',unlist(dimension_list[1]))
# yields
#                      user 
"dimension1"   "userType" 
dplyr:::mutate_cols(.data, !!!vars)

Simplified code shows that UserType is captured not as a variable but as an element. It is user that ends up as a variable. Can't help further without a reprex.

1 Like

@technocrat thank you for a reply!

Basically, here is an exact code that I want to reproduce

You will need a Google Analytics account with some site connected to it in order to make API request.

I am not sure if reprex will help because there should be a working Google Analytics view id to get access.
Please let me know if reprex is still needed.

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.