首页 > 解决方案 > R,从分组数据框中提取列作为向量

问题描述

想象一下你有这个数据框

x <- c("a1", "a2", "a3", "a4", "a1", "a2", "a3", "a4")

y <- c("red", "yellow", "blue", "green", "black", "pink", "purple", 
"orange")

df <- data.frame(x, y, stringsAsFactors = FALSE)

我想不出一种方法,最好使用 dplyr,在对数据框进行分组后提取 y 列。本质上,我想知道 a1、a2、a3 和 a4 中的颜色,并将这些结果存储为单独的向量,最好是在列表中。

我可以做

colors.in.a1 <- df %>% filter(x == "a1") %>% pull(y)

对于 a1、a2、a3、a4 中的每一个,但我的真实数据需要一段时间。我希望它的pull()行为类似于tally(),可能会返回一个基于分组变量命名的向量列表,但事实并非如此。

标签: rdplyr

解决方案


仅使用 Base R(感谢@thelatemail 的评论):

split(df$y, df$x)

或者我们可以使用nest

library(tidyverse)

df %>%
  group_by(x) %>%
  nest() %>%
  mutate(data = data %>% map(pull, y)) %>%
  pull(data) %>%
  setNames(unique(x))

结果:

$a1
[1] "red"   "black"

$a2
[1] "yellow" "pink"  

$a3
[1] "blue"   "purple"

$a4
[1] "green"  "orange"

推荐阅读