【问题标题】:Convert Classes ‘tbl_df’, ‘tbl’ and 'data.frame into dataframe with R使用 R 将类“tbl_df”、“tbl”和“data.frame”转换为数据帧
【发布时间】:2017-08-02 01:36:28
【问题描述】:

我得到了这个数据:

> 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 中的数据? 是否可以转换成数据框?

【问题讨论】:

  • 你应该先unlist()你的嵌套列。
  • 我怀疑额外的缩进是在此处复制str() 输出时的错误,并且此处根本没有嵌套任何内容。注意str() 输出中的5 variablessegments 位于需要通过 attr() 访问的属性中。

标签: r dplyr


【解决方案1】:
df = as.data.frame(gaDataExt)

就这么简单。

【讨论】:

  • 这可以改变顶级容器但列仍然有非基类,这可能会引起意外。
【解决方案2】:

我在尝试将数据导入 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:

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

【讨论】:

  • 使用Rnoob的解决方案即可。我得到了我需要的数据框类型/类。
【解决方案3】:

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

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

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

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

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

attr(gaDataExt, "query")$segment

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多