是否有更简洁的方法将dplyr tbl的一列作为向量,从具有数据库后端的tbl(即数据帧/表不能直接是子集)?
require(dplyr)
db <- src_sqlite(tempfile(), create = TRUE)
iris2 <- copy_to(db, iris)
iris2$Species
# NULL
Run Code Online (Sandbox Code Playgroud)
这太容易了,所以
collect(select(iris2, Species))[, 1]
# [1] "setosa" "setosa" "setosa" "setosa" etc.
Run Code Online (Sandbox Code Playgroud)
但它似乎有点笨拙.
我正在用来dplyr转换大型数据框,并且我想将 DF 的最新日期 + 1 存储为值。我知道有更简单的方法可以通过分解语句来做到这一点,但我试图用一个管道语句来完成这一切。我遇到了一些问题,但我不确定为什么 R 会这样默认。例子:
Day <- seq.Date(as.Date('2017-12-01'), as.Date('2018-02-03'), 'day')
Day <- sample(Day, length(Day))
ID <- sample(c(1:5), length(Day), replace = T)
df <- data.frame(ID, Day)
foo <- df %>%
arrange(desc(Day)) %>%
mutate(DayPlus = as.Date(Day) + 1) %>%
select(DayPlus) #%>%
#slice(1)
foo <- foo[1,1]
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,变为等于所需的foo值。2018-02-04但是,当我运行未注释的代码时slice:
foo <- df %>%
arrange(desc(Day)) %>%
mutate(DayPlus = as.Date(Day) + 1) %>%
select(DayPlus) %>%
slice(1)
foo <- foo[1,1]
Run Code Online (Sandbox Code Playgroud)
foo保留为数据框。我的主要问题是为什么foo没有成为第二个示例中的值,我的第二个问题是是否有一种简单的方法可以将“2018-02-04”作为foo从一个dplyr …