标签: unnest

有没有更简洁的“data.table”方法来取消 data.table 中的嵌套列?

假设我们有一个data.table带有嵌套列的val

\n
dt <- data.table(\n  grp = c(1, 2, 1, 3, 4),\n  val = list("a", c("b", "c"), c("d", "e", "f"), "g", c("h", "i"))\n)\n
Run Code Online (Sandbox Code Playgroud)\n

显示为

\n
> dt\n   grp   val\n1:   1     a\n2:   2   b,c\n3:   1 d,e,f\n4:   3     g\n5:   4   h,i\n
Run Code Online (Sandbox Code Playgroud)\n
\n

问题

\n

我想要unnest专栏val,其中可能的选项是使用tidyr::unnest,即

\n
> dt %>%\n+   unnest(val)\n# A tibble: 9 \xc3\x97 2\n    grp val\n  <dbl> <chr>\n1     1 a\n2     2 b\n3     2 c\n4     1 d\n5     1 e\n6     1 f\n7 …
Run Code Online (Sandbox Code Playgroud)

nested r unnest data.table

10
推荐指数
2
解决办法
441
查看次数

在SQL(Athena)中进行嵌套:如何将结构数组转换为从结构中提取的值数组?

我正在从贝叶斯统计模型中抽取样本,使用Avro将其序列化,然后将其上传到S3,然后使用Athena进行查询。

我需要帮助编写一个取消嵌套表中数组的查询。

CREATE TABLE查询看起来像:

CREATE EXTERNAL TABLE `model_posterior`(
  `job_id` bigint,
  `model_id` bigint,
  `parents` array<struct<`feature_name`:string,`feature_value`:bigint, `is_zid`:boolean>>,
  `posterior_samples` struct <`parameter`:string,`is_scaled`:boolean,`samples`:array<double>>)
Run Code Online (Sandbox Code Playgroud)

“ posterior_samples”列中的“ samples”数组是存储样本的位置。我设法通过以下查询取消嵌套“ posterior_samples”结构:

WITH samples AS (
    SELECT model_id, parents, sample, sample_index
    FROM posterior_db.model_posterior 
    CROSS JOIN UNNEST(posterior_samples.samples) WITH ORDINALITY AS t (sample, sample_index)
    WHERE job_id = 111000020709
)
SELECT * FROM samples
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

现在,我想要的是取消嵌套父母栏。此列中的每个记录都是一个结构数组。我试图创建一个仅包含该结构数组中“ feature_value”键的值数组的列。(我之所以想要一个数组,是因为parents数组的长度可以> 1)。

换句话说,对于父行中的每个数组,我想要一个大小相同的数组。该数组应仅包含原始数组中结构的“ feature_value”键的值。

关于如何解决这个问题的任何建议?

谢谢。

sql row avro unnest amazon-athena

8
推荐指数
1
解决办法
5309
查看次数

在其他列为NaN的情况下,填写相同数量的字符

我有以下虚拟数据框:

df = pd.DataFrame({'Col1':['a,b,c,d', 'e,f,g,h', 'i,j,k,l,m'],
                   'Col2':['aa~bb~cc~dd', np.NaN, 'ii~jj~kk~ll~mm']})

        Col1            Col2
0    a,b,c,d     aa~bb~cc~dd
1    e,f,g,h             NaN
2  i,j,k,l,m  ii~jj~kk~ll~mm
Run Code Online (Sandbox Code Playgroud)

真实数据集具有形状500000, 90

我需要将这些值取消嵌套到行中,并且explode为此使用了新方法,该方法工作正常。

问题是NaN,这些将导致后面的长度不相等explode,因此我需要填充与填充值相同数量的定界符。在这种情况下,~~~由于第1行具有三个逗号。


预期产量

        Col1            Col2
0    a,b,c,d     aa~bb~cc~dd
1    e,f,g,h             ~~~
2  i,j,k,l,m  ii~jj~kk~ll~mm
Run Code Online (Sandbox Code Playgroud)

尝试1

df['Col2'].fillna(df['Col1'].str.count(',')*'~')
Run Code Online (Sandbox Code Playgroud)

尝试2:

np.where(df['Col2'].isna(), df['Col1'].str.count(',')*'~', df['Col2'])
Run Code Online (Sandbox Code Playgroud)

这可行,但是我觉得有一个更简单的方法:

characters = df['Col1'].str.replace('\w', '').str.replace(',', '~')
df['Col2'] = df['Col2'].fillna(characters)

print(df)

        Col1            Col2
0    a,b,c,d     aa~bb~cc~dd
1    e,f,g,h             ~~~
2  i,j,k,l,m  ii~jj~kk~ll~mm

d1 = df.assign(Col1=df['Col1'].str.split(',')).explode('Col1')[['Col1']]
d2 = …
Run Code Online (Sandbox Code Playgroud)

python explode pandas unnest

8
推荐指数
1
解决办法
80
查看次数

在 AWS Redshift 中取消数组的嵌套

我有一个带有列的表,其中包含如下列表:

id
[1,2,3,10]
[1]
[2,3,4,9]
Run Code Online (Sandbox Code Playgroud)

我想要的结果是一个包含未列出值的表,如下所示:

id2
1
2
3
10
1
2
3
4
9
Run Code Online (Sandbox Code Playgroud)

我尝试了在网上找到的不同解决方案、aws 文档SO 解决方案博客文章,但没有任何运气,因为我在列中有一个列表,而不是 json 对象。任何帮助表示赞赏!

sql amazon-redshift unnest

8
推荐指数
1
解决办法
2万
查看次数

谷歌BigQuery,我使用'免费'功能时丢失了空行

#StandardSQL
WITH tableA AS (
SELECT ["T001", "T002", "T003"] AS T_id, [1, 5] AS L_id
UNION ALL
SELECT ["T008", "T009"] AS T_id, NULL AS L_id
)

SELECT * FROM tableA, UNNEST(L_id) AS unnest
Run Code Online (Sandbox Code Playgroud)

当我执行此代码时,我期望结果如下.

RowNumber  T-id            L-id  unnest
1          T001,T002,T003  1,5   1
2          T001,T002,T003  1,5   5
3          T004,T005       NULL  NULL
Run Code Online (Sandbox Code Playgroud)

但我得到了结果......

RowNumber  T-id            L-id  unnest
1          T001,T002,T003  1,5   1
2          T001,T002,T003  1,5   5
Run Code Online (Sandbox Code Playgroud)

我输掉了第三排.然后,我看到了谷歌的官方文档.有这样写的.

UNNEST treats NULL as follows.
 ?NULL and empty ARRAY generate zero rows.
 ?An ARRAY containing NULL …
Run Code Online (Sandbox Code Playgroud)

sql null google-bigquery unnest

7
推荐指数
1
解决办法
2520
查看次数

使用带有NULL值的tidyr unexst

我将一个JSON文件转换为一个带有嵌套列表结构的data.frame,我希望将其删除并展平.列表中的某些值为NULL,不接受这些值.如果我用只有NA值的data.frame结构替换NULL值,我会得到所需的结果.

以下是我的问题的简化示例.我试图用NA data.frame替换NULL值但由于嵌套结构而无法管理.我怎样才能达到预期的效果?

library(tidyr)
input1 <- data.frame(id = c("c", "d", "e"), value = c(7, 8, 9))
input2 <- NULL
input3 <- data.frame(id = c(NA), value = c(NA))

df <- dplyr::tibble(
a = c(1, 2),
b = list(a = input1, c = input2))  
unnest(df)
Run Code Online (Sandbox Code Playgroud)

给出错误"错误:每列必须是向量列表或数据帧列表[b]"

df2 <- dplyr::tibble(
a = c(1, 2),
b = list(a = input1, c = input3))  
unnest(df2)
Run Code Online (Sandbox Code Playgroud)

给出所需的输出.

r unnest tidyr

7
推荐指数
1
解决办法
1539
查看次数

检查一个变量R内的各种DATE的差异

我想在变量包含不同的YEAR时拆分行,也拆分col:"Price"用均匀的除以日期的数字 - > count(";")+1

有一个表尚未拆分变量.

# Dataset call df 

Price   Date 
500     2016-01-01
400     2016-01-03;2016-01-09
1000    2016-01-04;2017-09-01;2017-08-10;2018-01-01
25      2016-01-04;2017-09-01
304     2015-01-02
238     2018-01-02;2018-02-02
Run Code Online (Sandbox Code Playgroud)

欲望展望

# Targeted df
Price   Date 
500     2016-01-01
400     2016-01-03;2016-01-09
250     2016-01-04
250     2017-09-01
250     2017-08-10
250     2018-01-01
12.5    2016-01-04
12.5    2017-09-01
304     2015-01-02
238     2018-01-02;2018-02-02
Run Code Online (Sandbox Code Playgroud)

一旦变量包含不同的年份定义,下面是操作必须做的.(这只是一个例子.)

mutate(Price = ifelse(DIFFERENT_DATE_ROW,
                     as.numeric(Price) / (str_count(Date,";")+1),
                     as.numeric(Price)),
       Date = ifelse(DIFFERENT_DATE_ROW,
                     strsplit(as.character(Date),";"),
                     Date)) %>%
 unnest()
Run Code Online (Sandbox Code Playgroud)

我遇到了一些不能使用dplyr函数的约束,"if_else"因为 否则无法识别NO操作.只有ifelse正常工作.

如何找出一个变量中的年份差异来PROVOKE分割线和拆分价格计算?

到目前为止分裂元素的操作就像

unlist(lapply(unlist(strsplit(df1$noFDate[8],";")),FUN = year))
Run Code Online (Sandbox Code Playgroud)

无法解决问题.

我是编码的初学者,请考虑真实数据超过200万行和50列,请随意更改上述所有操作.

r date list unnest mutate

7
推荐指数
1
解决办法
76
查看次数

在 Mysql 中从数组内的 Json 数据中获取值

我们将信息保存在一个 json 列中,该列包含一个数组中的 json 数据。

数据结构:

[
    {
        "type":"automated_backfill",
        "title":"Walgreens Sales Ad",
        "keyword":"Walgreens Sales Ad",
        "score":4
    },
    {
        "type":"automated_backfill",
        "title":"Nicoderm Coupons",
        "keyword":"Nicoderm Coupons",
        "score":4
    },
    {
        "type":"automated_backfill",
        "title":"Iphone Sales",
        "keyword":"Iphone Sales",
        "score":3
    },
    {
        "type":"automated_backfill",
        "title":"Best Top Load Washers",
        "keyword":"Best Top Load Washers",
        "score":1
    },
    {
        "type":"automated_backfill",
        "title":"Top 10 Best Cell Phones",
        "keyword":"Top 10 Best Cell Phones",
        "score":1
    },
    {
        "type":"automated_backfill",
        "title":"Tv Deals",
        "keyword":"Tv Deals",
        "score":0
    }
]
Run Code Online (Sandbox Code Playgroud)

我们正在尝试什么:

SELECT id, ad_meta->'$**.type' FROM window_requests
Run Code Online (Sandbox Code Playgroud)

返回:

在此处输入图片说明

我们希望将每种类型作为行,我认为这只能通过存储过程实现,返回整列,然后在每一行上运行循环并返回数据...

或者你能想到更好的解决方案吗?

更新架构:

或者我们应该更改我们的数据库并将信息保存在单独的表中而不是 json …

mysql sql arrays json unnest

7
推荐指数
1
解决办法
9823
查看次数

Unnest 或 unchop 包含不同长度列表的数据帧

我有一个包含多个列的数据框,其中包含我想要unnest(或unchop)的列表列。但是,它们的长度不同,因此产生的错误是Error: No common size for...

这是一个 reprex 来显示哪些有效,哪些无效。

library(tidyr)
library(vctrs)

# This works as expected
df_A <- tibble(
  ID = 1:3,
  A = as_list_of(list(c(9, 8, 5), c(7,6), c(6, 9)))
)

unchop(df_A, cols = c(A))
# A tibble: 7 x 2
     ID     A
  <int> <dbl>
1     1     9
2     1     8
3     1     5
4     2     7
5     2     6
6     3     6
7     3     9

# This works as expected as the lists are the …
Run Code Online (Sandbox Code Playgroud)

r unnest tidyr

7
推荐指数
1
解决办法
1119
查看次数

使用 tidyverse 将列表嵌套到数据帧:比 tidyr unnest_wider 更快

我通过读取存储视频游戏日志信息的 JSON 获得了一个嵌套列表。列表的时间元素是一个简单的向量,而 inputManagerStates 和syncedProperties 是可能包含 0 个或多个元素的列表。

这是这个问题的后续内容,在一些帮助下,我设法将数据转换为矩形格式。不幸的是,我有很多这样的 JSON 文件,并且unnest_wider运行速度似乎相当慢。

列表:

test_list <- 
  list(list(time = 9.92405605316162, inputManagerStates = list(), 
syncedProperties = list()), list(time = 9.9399995803833, 
inputManagerStates = list(list(inputId = "InputY", buttonState = FALSE, 
    axisValue = 0), list(inputId = "InputX", buttonState = FALSE, 
    axisValue = 0.0501395985484123), list(inputId = "xPos", 
    buttonState = FALSE, axisValue = 5), list(inputId = "yPos", 
    buttonState = FALSE, axisValue = 0.0799999982118607), 
    list(inputId = "zPos", buttonState = FALSE, axisValue = 0), 
    list(inputId = "xRot", buttonState …
Run Code Online (Sandbox Code Playgroud)

r list unnest tidyr

7
推荐指数
1
解决办法
362
查看次数