【发布时间】:2022-01-13 17:15:30
【问题描述】:
我觉得tidyverse 中可能有比for-loop 更好的方法。从一个标准的 tibble/dataframe 开始,创建一个列表,其中列表元素的名称是一列的唯一值 (group_by?),列表元素是另一列的所有值。
my_data <- tibble(list_names = c("Ford", "Chevy", "Ford", "Dodge", "Dodge", "Ford"),
list_values = c("Ranger", "Equinox", "F150", "Caravan", "Ram", "Explorer"))
# A tibble: 6 × 2
list_names list_values
<chr> <chr>
1 Ford Ranger
2 Chevy Equinox
3 Ford F150
4 Dodge Caravan
5 Dodge Ram
6 Ford Explorer
这是所需的输出:
desired_output <- list(Ford = c("Ranger", "F150", "Explorer"),
Chevy = c("Equinox"),
Dodge = c("Caravan", "Ram"))
$Ford
[1] "Ranger" "F150" "Explorer"
$Chevy
[1] "Equinox"
$Dodge
[1] "Caravan" "Ram"
这可以通过for-loop 来完成,但我敢打赌有一个tidyverse 函数可以让它更简单/更快,等等。
desired_output <- list()
for(i in seq_along(my_data$list_names)) {
entry <- my_data %>%
filter(list_names == my_data$list_names[i]) %>%
pull(list_values)
desired_output[[my_data$list_names[i]]] <- entry
}
【问题讨论】: