设A是任意维数的数组(在我的例子中为2或3).如何在不事先知道尺寸数量的情况下展平(重塑为1D)此阵列?
如果我知道尺寸的数量,我可以很容易地获得元素的总数(通过使用"数组大小"功能的组合),然后使用此数字重新形成A到1D.不幸的是,"数组大小"函数本身返回一个数组元素数等于维数的数组,这使我们回到最初的问题.
我已经通过创建一个函数(VI)"解决"了这个问题,该函数返回了3D数组的元素总数(我期望处理的最常见的数组类型),因此我可以将它作为参数提供给重塑功能.问题:它不会接受2D数组,即使算法适用于这样的数组!(似乎在Labview中,数组控件对它们接受的维数是严格的,例如在Matlab中不是这种情况).
一个很好的解决方案是将"数组大小"给出的数组的所有元素相乘以快速获得元素总数的简单方法,而不必将其包装在子VI中.总的来说,是不是有一种简单有效的方法来解决这个问题?应该很标准..
Map.flatten上的文档说明如下:
将此可遍历集合的映射转换为由这些可遍历集合的元素组成的映射.
我得到了"可遍历集合的地图".例如,这将是一个列表地图.仅凭这个定义,a就有Map[Int, List[Int]]资格了.
但是什么是"这些可穿越集合的元素形成的地图"?这听起来很简单,但我很难让它发挥作用.
文档中提供的示例代码是......嗯......我们应该说,不适用吗?
Run Code Online (Sandbox Code Playgroud)val xs = List( Set(1, 2, 3), Set(1, 2, 3) ).flatten // xs == List(1, 2, 3, 1, 2, 3) val ys = Set( List(1, 2, 3), List(3, 2, 1) ).flatten // ys == Set(1, 2, 3)
我尝试了一些不同的东西,但它们会产生同样的错误.以下是几个例子:
scala> val m = Map(List(1) -> List(1,2,3), List(2) -> List(4,5,6), List(3) -> List(7,8,9))
m: scala.collection.immutable.Map[List[Int],List[Int]] = Map(List(1) -> List(1, 2, 3), List(2) -> List(4, 5, 6), List(3) -> List(7, 8, 9)) …Run Code Online (Sandbox Code Playgroud) 我不能有任何嵌套的跨度,所以我需要展平它们并连接它们的类属性,这样我就可以跟踪哪些类是父类.
这是一个简化的输入:
<body>
<h1 class="section">Title</h1>
<p class="main">
ZZZ
<span class="a">
AAA
<span class="b">
BBB
<span class="c">
CCC
<preserveMe>
eeee
</preserveMe>
</span>
bbb
<preserveMe>
eeee
</preserveMe>
</span>
aaa
</span>
</p>
</body>
Run Code Online (Sandbox Code Playgroud)
这是所需的输出
<body>
<h1 class="section">Title</h1>
<p class="main">
ZZZ
<span class="a">
AAA
</span>
<span class="ab">
BBB
</span>
<span class="abc">
CCC
<preserveMe>
eeee
</preserveMe>
</span>
<span class="ab">
bbb
<preserveMe>
eeee
</preserveMe>
</span>
<span class="a">
aaa
</span>
</p>
</body>
Run Code Online (Sandbox Code Playgroud)
这是我最接近的(我真的很陌生,所以即使这样做也花了很长时间......)
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<p> …Run Code Online (Sandbox Code Playgroud) 也许我遗漏了一些明显的东西,但试图将 R 中的命名列表的命名列表(甚至可能更加嵌套)扁平化为最终一个平面列表。purrr并且rlist似乎有这方面的工具。我怎样才能实现子列表的名称成为扁平化结果列表的名称预加密,例如list1.blist.a在purrr?我的实际列表嵌套得更深,具有不同数量的级别和不同级别上的重复名称。最后我执行purrr::map_df(final_list, bind_rows),这似乎删除了所有重复的名称(即使没有,我也不知道原始重复的名称来自哪个分支)。我可以做到这一点,rlist但我希望找到一个tidyverse解决方案(没有什么反对的rlist,但很多人已经tidyverse安装了)。
编辑:
另请注意,rlist::list.flatten()始终会删除除顶部之外的所有级别,同时一次purrr::flatten()删除一个级别,这有时可能是您所需要的。您可以根据需要经常嵌套 purrr::map(.x, .f = rlist::list.flatten) 来实现相同的目的,但它很麻烦而且不美观/可读。
alist <- list(list1 = list(a = 1, b = 2, blist = list(a = 3, b = 4)),
list2 = list(a = 1, b = 2, blist = list(a = 3, b = 4)))
str(alist)
List of 2
$ list1:List of 3
..$ a : num 1 …Run Code Online (Sandbox Code Playgroud) 在 BigQuery 中展平两个数组的结构的正确方法是什么?我有一个如图所示的数据集(struct.destination 和 struct.visitors 数组是有序的 - 即访问者计数专门对应于同一行中的目的地):
我想重新组织数据,以便为每个独特的出发地和目的地组合计算总访客数。理想情况下,最终结果将如下所示:
我尝试连续两次使用 UNNEST - 一次在 struct.destination 上,然后在 struct.visitors 上,但这会产生错误的结果(每个目的地都映射到访问者计数数组中的每个值,而它应该只映射到值在同一行):
SELECT
origin,
unnested_destination,
unnested_visitors
FROM
dataset.table,
UNNEST(struct.destination) AS unnested_destination,
UNNEST(struct.visitors) AS unnested_visitors
Run Code Online (Sandbox Code Playgroud) 这个问题的后续问题:是否可以递归应用unnest_wider,直到不再剩下列表列?
我正在使用一个深度嵌套的数据集,其中一个列表列具有单个级别(一次unnest_wider调用即可解决问题);但另一个有 228-237 个不同深度的列表列。我想“分解”整个数据集,使其整洁,所有列都位于层次结构的顶部。
这是一个示例:
structure(list(fullVisitorId = c("2248281639583218707", "8647436381089107732"
), date = c("20170801", "20170801"), visitStartTime = c(1501583974L,
1501616585L), totals = list(list(visits = 1L, hits = 1L, pageviews = 1L,
timeOnSite = NA_integer_, bounces = 1L, transactions = NA_integer_,
transactionRevenue = NA_integer_, newVisits = 1L, screenviews = NA_integer_,
uniqueScreenviews = NA_integer_, timeOnScreen = NA_integer_,
totalTransactionRevenue = NA_integer_, sessionQualityDim = 1L),
list(visits = 1L, hits = 1L, pageviews = 1L, timeOnSite = NA_integer_,
bounces = 1L, …Run Code Online (Sandbox Code Playgroud) 我想在构建后解析所有修订标签,所以我使用展平。我有一个这样的多模块项目:
A (root)
|_B (parent = A, dependencyManagement with version = ${revision}
|_C (parent = B, dependencies declared in dependencyManagement without specifying the version)
Run Code Online (Sandbox Code Playgroud)
问题是在 B 的扁平化 pom 中,问题${revision}没有得到解决。此外,在 C 的扁平化 pom 中,版本仍然丢失,而我希望找到 B 中 dependencyManagement 中声明的版本。
这就是我配置展平的方式:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.1.0</version>
<configuration>
<updatePomFile>true</updatePomFile>
<flattenMode>resolveCiFriendliesOnly</flattenMode>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
我尝试在其中添加此部分<configuration>:
<pomElements>
<dependencyManagement>expand</dependencyManagement>
<dependencies>expand</dependencies>
</pomElements>
Run Code Online (Sandbox Code Playgroud)
这部分解决了问题,因为它解决了所有版本,但是 pom 变得太冗长,因为它扩展了父级的所有依赖项。所以结果是 C …
我有一个变体数据类型,我正在对其执行横向展平,但随后我需要左连接其中一个 json 元素,以从 Snowflake 中的另一个关系表中查找相应 ID 的值。当我这样做时,它会给我错误“横向视图不能位于连接的左侧”,这是没有意义的,因为如果我不包含外部连接,则创建视图,然后在其顶部创建一个附加视图这个视图,它允许我执行左连接。
例子:
create or replace view my_view
copy grants
as
select
rowid as row_id,
siteData.value:siteID::int as site_id,
es.site_name AS site_name
from
"RAW_DATA" raw,
lateral flatten(datamap:data, outer => true) siteData
LEFT join ext_site es on es.siteid = siteData.value:siteID
;
Run Code Online (Sandbox Code Playgroud) 对此我很伤脑筋。在 Snowflake 中,我的字段city_info看起来像(对于 3 个样本记录)
[{"name": "age", "content": 35}, {"name": "city", "content": "Chicago"}]
[{"name": "age", "content": 20}, {"name": "city", "content": "Boston"}]
[{"name": "city", "content": "New York"}, {"name": "age", "content": 42}]
Run Code Online (Sandbox Code Playgroud)
我尝试city从中提取一列
Chicago
Boston
New York
Run Code Online (Sandbox Code Playgroud)
我试着把它压平
select *
from lateral flatten(input =>
select city_info::VARIANT as event
from data
)
Run Code Online (Sandbox Code Playgroud)
从那里我可以导出该值,但这只允许我对 1 行执行此操作(因此我必须添加limit 1没有意义的内容,因为我的所有行都需要这个)。
如果我尝试对 3 行执行此操作,它会告诉我subquery returns more than one row.
任何帮助表示赞赏!克里斯
我有sampledata使用下面的代码复制的数据:
###producing sample data
sampledatain1 <- data.frame(in_1=c(1,2,3,4,5),in_2=c("A","B","C","D","E"),stringsAsFactors = F)
sampledatain2 <- data.frame(in_1=c(6,7,8,9,10),in_2=c("F","G","H","I","J"),stringsAsFactors = F)
sampledatain3 <- data.frame(in_1=c(99,98,97,96,95),in_2=c("Z","Y","X","W","V"),stringsAsFactors = F)
sampledata <- data.frame(row = 1:3,
colmerge1 = c("MA","MB","MC"),
colmerge2 = -99:-97,
stringsAsFactors = FALSE)
sampledata$df <- list(sampledatain1,sampledatain2,sampledatain3)
Run Code Online (Sandbox Code Playgroud)
我想展平所有嵌套的数据框并将它们组合起来,结果如下desired_data:
###reproducing desired data
library(data.table)
sampledatain1$row <- 1
sampledatain1$colmerge1 <- "MA"
sampledatain1$colmerge2 <- -99
sampledatain2$row <- 2
sampledatain2$colmerge1 <- "MB"
sampledatain2$colmerge2 <- -98
sampledatain3$row <- 3
sampledatain3$colmerge1 <- "MC"
sampledatain3$colmerge2 <- -97
desired_data <- rbindlist(list(sampledatain1,sampledatain2,sampledatain3))
Run Code Online (Sandbox Code Playgroud)
如何使用函数从样本数据生成desired_data来做到这一点?
flatten ×10
r ×3
dataframe ×2
purrr ×2
snowflake-cloud-data-platform ×2
sql ×2
arrays ×1
data.table ×1
dictionary ×1
java ×1
json ×1
labview ×1
lateral ×1
maven ×1
maven-plugin ×1
merge ×1
nested ×1
nested-lists ×1
scala ×1
split ×1
struct ×1
tidyr ×1
version ×1
xml ×1
xslt ×1