如何在tidyverse中将数据帧强制转换为向量

时间:2019-01-02 16:42:23

标签: r tidyverse

我的数据框如下:

structure(list(Keyword = c("Sales", "Info", "Reply", "Service", 
"Accounting", "donotreply"), Class = c("Check", "Send", "Do Not Send", 
"Check", NA, "Do Not Send")), class = "data.frame", row.names = c(NA, 
-6L))

我正在尝试通过将“不发送”的关键字通过管道传递到as.vector来将其转换为它们自己的向量。以下是我到目前为止的代码:

DNSkeywords <- data.frame(read_excel('Keywords List.xlsx', sheet = 'Sheet1', col_names = TRUE)) %>% 
  filter(Class == 'Do Not Send') %>% 
  select(Keyword) %>% 
  as.vector(.$Keyword)

我的输出应该只是以下内容:

c("Reply", "donotreply")

当然,我可以写第二行DNSkeywords <- as.vector(DNSkeywords$Keyword),但我宁愿将其插入。我不确定如何在tidyverse中使用as.vector()命令,以便可以选择一个小标题中的列。

1 个答案:

答案 0 :(得分:1)

您可以按以下方式使用pullpluck

library(tidyverse)

dat %>%
  filter(Class == 'Do Not Send') %>% 
  pull(Keyword)

dat %>%
  filter(Class == 'Do Not Send') %>% 
  pluck("Keyword")

或者仅从基数R中的[[

dat %>%
  filter(Class == 'Do Not Send') %>% 
  `[[`("Keyword")

如果您确实想使用unlist,也可以使用select,但是这个词比较罗

dat %>%
  filter(Class == 'Do Not Send') %>% 
  select(Keyword) %>%
  unlist(use.names = FALSE)

数据

dat <- structure(list(Keyword = c("Sales", "Info", "Reply", "Service", 
                           "Accounting", "donotreply"), Class = c("Check", "Send", "Do Not Send", 
                                                                  "Check", NA, "Do Not Send")), class = "data.frame", row.names = c(NA, 
                                                                                                                                    -6L))