如何使用nest()函数为嵌套列的列表元素命名为对应大洲名称?
给嵌套列的列表元素添加对应大洲名称的命名
原生的nest()函数本身不会自动为生成的列表元素赋予分组变量的名称,但我们可以通过简单的后续操作或者替代方法实现这个需求,以下是两种可行方案:
方案一:为已嵌套的data列添加命名
在nest()之后,利用purrr::set_names()函数,结合continent列的取值为列表元素命名:
library(tidyverse) # 生成示例数据 dat <- tibble( continent = rep(c("Asia", "Europe", "Africa", "Americas", "Oceania"), each = 5), number_of_teams = sample(25:30, 25, replace = TRUE), country = c("Japan", "South Korea", "China", "Iran", "Australia", "Germany", "France", "Spain", "Italy", "England", "Nigeria", "Egypt", "South Africa", "Ghana", "Cameroon", "Brazil", "Argentina", "USA", "Mexico", "Colombia", "New Zealand", "Fiji", "Solomon Islands", "Tahiti", "Papua New Guinea"), games = sample(25:30, 25, replace = TRUE), goals_team = sample(15:30, 25, replace = TRUE), team_value = sample(1:10, 25, replace = TRUE) ) # 嵌套并为列表元素命名 nested_data <- dat %>% group_by(continent) %>% nest() %>% ungroup() %>% mutate(data = set_names(data, continent))
执行后,调用nested_data$data时,列表的每个元素都会以对应的大洲名称作为名字,比如可以直接用nested_data$data$Europe取出欧洲的分组数据。
方案二:先拆分再构建嵌套 tibble
如果想一步到位,也可以先使用split()按大洲拆分数据(拆分后的列表自带分组名称),再将其转换为嵌套结构:
nested_data <- tibble( continent = names(split(dat, dat$continent)), data = split(dat, dat$continent) )
这种方式得到的data列列表元素同样带有大洲名称,效果和方案一完全一致。
你可以通过names(nested_data$data)验证列表元素的命名是否正确,结果会返回所有大洲的名称向量。
内容的提问来源于stack exchange,提问作者Laura
相关产品推荐
相关产品推荐

