在 R 列表中,如何设置子列表名称

In R list ,how to set sub list names

如何设置列表名称,代码如下。 目前,split_data包括两个子列表[[1]][[2]],如何为它们分别设置名称? 我想为 [[1]] 设置名称 'A',为 [[2]] 设置 'B',这样可以检索数据使用 split_data['A']... 任何人都可以帮助解决这个问题,谢谢? 例如 ma <- list(a=c('a1','a2'),b=c('b1','b2')) 可以使用 ma["a"] 作为子列表

library(tidyverse)
test_data <- data.frame(category=c('A','B','A','B','A','B','A','B'),
                        sales=c(1,2,4,5,8,1,4,6))

split_data <- test_data %>% group_split(category)

其他人在评论中向您展示了如何使用 split() 而不是 group_split() 来获得您想要的内容。这似乎是最简单的解决方案。

但是,如果您坚持使用现有代码,这里有一个替代方案,它保留您当前的代码并添加名称。

library(tidyverse)
test_data <- data.frame(category=c('A','B','A','B','A','B','A','B'),
                        sales=c(1,2,4,5,8,1,4,6))

split_data <- test_data %>% group_split(category)


names(split_data) <- test_data %>% group_by(category) %>% group_keys() %>% apply(1, paste, collapse = ".")

想法是使用 group_by 以与 group_split 相同的方式拆分,然后将密钥提取为小标题。这将每组一行,但将在不同的列中包含不同的变量,因此我通过粘贴带有点作为分隔符的列来将它们放在一起。管道中的最后一个表达式等效于 apply(keys, 1, f) 其中 ffunction(row) paste(row, collapse = ".")。它将 f 应用于 tibble 的每一行,生成一个名称。

即使拆分发生在多个变量上,这也应该有效,并生成与 split().

生成的名称相似的名称