使用R将类'tbl_df','tbl'和'data.frame转换为数据帧

时间:2016-06-02 14:14:00

标签: r dplyr

我收到了这些数据:

> str(gaDataExt)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   2 obs. of  5 variables:
 $ date          : POSIXct, format: "2016-05-24" "2016-05-31"
 $ deviceCategory: chr  "desktop" "desktop"
  $ users         : int  1 2
  $ sessions      : int  1 2
  $ pageviews     : int  11 85
  - attr(*, "profileInfo")=List of 6
   ..$ profileId            : chr "25439551"
   ..$ accountId            : chr "12543305"
   ..$ webPropertyId        : chr "UA-12543305-1"
   ..$ internalWebPropertyId: chr "26790206"
   ..$ profileName          : chr "www.ciao.ch"
   ..$ tableId              : chr "ga:25439551"
  - attr(*, "query")=List of 8
   ..$ start.date : chr "30daysAgo"
   ..$ end.date   : chr "yesterday"
   ..$ profileId  : chr "ga:25439551"
   ..$ dimensions : chr "ga:date,ga:deviceCategory"
   ..$ metrics    : chr  "ga:users" "ga:sessions" "ga:pageviews"
   ..$ segment    : chr "sessions::condition::ga:pagePath=@/f            /relations     /questions_reponses-best_of/;sessions::condition::ga:pagePath=@/f/manger-bouger/q"| __truncated__

   ..$ start.index: int 1
   ..$ max.results: int 10000
  - attr(*, "sampled")= logi FALSE

我想用ggplot2创建一个情节但我无法访问$ segment中的数据? 是否可以转换为数据框?

3 个答案:

答案 0 :(得分:7)

df = as.data.frame(gaDataExt)

这很简单。

答案 1 :(得分:0)

如果这准确再现了str()的输出(我不确定,因为userssessionspageviews似乎是缩进),然后segments组件实际上是列表中的几个组件之一,它是pageviews组件的属性

假设上述内容正确无误,那么您可以通过以下方式访问包含segment组件的列表:

attr(gaDataExt$pageviews, "query")$segment

attr(gaDataExt[["pageviews"]], "query")$segment

如果这些属性实际上是tbl_df的属性,则通过

访问segments
attr(gaDataExt, "query")$segment

我怀疑你想要这个,因为属性似乎出现在tbl_df上,str()输出不清楚。

答案 2 :(得分:0)

我在尝试将数据输入knn时遇到了同样的问题,并且它告诉我,不良导入的子集长度不同。我最终创建了一个for循环,将每个列逐个转储到一个新的数据框中。新的数据框架很干净。

我的代码:

library(readr)
#Import data to CancerData
cancerData_raw <- read_csv("E:/R/TestDataSets/breast-cancer-wisconsin.data", col_names = FALSE)
#clean data structure.  This read is giving lots of errors and tbl, tbl_df, dataframe types
cancerData <- data.frame(cancerData_raw[,1]) 
for (column in c(2:ncol(cancerData_raw))){
  print(column)
  cancerData <- cbind(cancerData, cancerData_raw[,column])
}

#comparing the structure of the old set vs copied one:
str(cancerData_raw)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   699 obs. of  11 variables:
#vs
str(cancerData)
'data.frame':   699 obs. of  11 variables:

我不确定是否有更简单的方法来执行该操作。在较大的集合上运行这是非常低效的。