假设我们有一个data.table
带有嵌套列的val
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我想要unnest
专栏val
,其中可能的选项是使用tidyr::unnest
,即
> 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) 我正在从贝叶斯统计模型中抽取样本,使用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”键的值。
关于如何解决这个问题的任何建议?
谢谢。
我有以下虚拟数据框:
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) 我有一个带有列的表,其中包含如下列表:
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 对象。任何帮助表示赞赏!
#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) 我将一个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)
给出所需的输出.
我想在变量包含不同的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列,请随意更改上述所有操作.
我们将信息保存在一个 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 …
我有一个包含多个列的数据框,其中包含我想要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) 我通过读取存储视频游戏日志信息的 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)