-2

我正在研究 Google Analytics 示例数据,它直接来自 BigQuery。

数据源 -> https://support.google.com/analytics/answer/7586738?hl=en

数据有很多嵌套列,类型为“list”。如何取消嵌套这些列并调整数据以进行平滑分析?

使用 unnest() 以较长的形状打开整个列,并删除列名以及列表中的数据。很难在没有列名的情况下构建我的分析和可视化数据。或者以任何其他方式查看列表中的这些列并访问它们?

编辑:我想在不丢失名称的情况下取消嵌套嵌套列。

我使用的一段列和代码

谢谢。

4

2 回答 2

0

我使用了以下答案 -

数据 %>% unnest_wider(nested_column, names_sep = "_")

于 2020-09-08T02:40:42.033 回答
0

我不是 100% 确定我是否理解您的问题。当然,具有嵌套列的数据框可能会令人不快。它仍然是显示数据的一种非常有效的方式。由于我不确定您要分析数据的哪一部分,或者 data.frame 中的列表看起来如何(我不想下载数据),所以我的回答不会太具体。

但是,也许您可​​以仅将数据减少到分析所需的变量并相应地对其进行重塑......也许是这样的......

x <- dplyr::tibble(ID=c(1,2,3),
              VAR1=list(c(1,2,3,4),
                        c(3,3,3,3),
                        c(1,3,1,2))) 
# A tibble: 3 x 2
     ID VAR1     
  <dbl> <list>   
1     1 <dbl [4]>
2     2 <dbl [4]>
3     3 <dbl [4]>

lapply(seq(1,nrow(x)),function(idx){
    dplyr::as_tibble(x$VAR1[[idx]]) %>%
        dplyr::mutate(ID=x$ID[idx])}) %>%
    dplyr::bind_rows()

# A tibble: 12 x 2
   value    ID
   <dbl> <dbl>
 1     1     1
 2     2     1
 3     3     1
 4     4     1
 5     3     2
 6     3     2
 7     3     2
 8     3     2
 9     1     3
10     3     3
11     1     3
12     2     3

更新:保留名字

保留名称的解决方案与上面的解决方案非常相似。最大的区别是使用dplyr::tibbleaf dplyr::as_tibble(不知道为什么我首先使用后者)。

# some fake data    
x <- dplyr::tibble(ID=c(1,2,3),
                       VAR1=list(c(1,2,3,4) %>% magrittr::set_names(c("A","B","C","D")),
                                 c(3,3,3,3) %>% magrittr::set_names(c("E","F","G","H")),
                                 c(1,3,1,2) %>% magrittr::set_names(c("I","J","K","L")))) 

# unnesting variable
y <- lapply(seq_len(nrow(x)), function(idx){
  dplyr::tibble(VAR1=x$VAR1[[idx]],
                ID=x$ID[idx])}) %>%
  dplyr::bind_rows()

> y$VAR1
A B C D E F G H I J K L 
1 2 3 4 3 3 3 3 1 3 1 2 
于 2020-08-25T09:34:18.947 回答