问题描述
我正在研究Google Analytics(分析)示例数据,它直接来自BigQuery。
数据源-> https://support.google.com/analytics/answer/7586738?hl=en
数据具有许多嵌套列,类型为“列表”。如何取消嵌套这些列并调整数据形状以进行平滑分析?
使用unnest()会以更长的形状打开整个列,并删除列表中数据的列名。很难在没有列名的情况下对数据进行分析和可视化。还是通过其他方式查看列表中的这些列并进行访问?
谢谢。
解决方法
如果我了解您的问题,我不确定100%。当然,带有嵌套列的数据帧可能会令人不快。仍然是显示数据的一种非常有效的方法。由于我不确定您要分析数据的哪一部分,或者不确定data.frame中的列表的样子(我不想下载数据),我的答案不会太具体。
但是也许您只能将数据缩减为分析所需的变量,并相应地调整其形状……也许像这样……
x <- dplyr::tibble(ID=c(1,2,3),VAR1=list(c(1,3,4),c(3,c(1,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::tibble
代替dplyr::as_tibble
(不知道为什么我首先使用后者)。
# some fake data
x <- dplyr::tibble(ID=c(1,4) %>% magrittr::set_names(c("A","B","C","D")),3) %>% magrittr::set_names(c("E","F","G","H")),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
,
我使用了以下答案-
数据%>% unnest_wider(nested_column,names_sep =“ _”)