是否有更简洁的方法将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)
但它似乎有点笨拙.
我想将差异应用于数据框列,通过其名称访问它。我所做的如下:
\n\nabscissa <- "distance"\ndata.op[, abscissa]\nRun Code Online (Sandbox Code Playgroud)\n\n我得到这个输出
\n\n# A tibble: 15 x 1\n distance\n <dbl>\n 1 0.0426\n 2 0.0409\n 3 0.0412\n 4 0.0406\n 5 0.0406\n 6 0.0407\n 7 0.0402\n 8 0.0403\n 9 0.103 \n10 0.0402\n11 0.0395\n12 0.0407\n13 0.0406\n14 0.0405\n15 0.0404\nRun Code Online (Sandbox Code Playgroud)\n\n然后我简单地尝试:
\n\n diff(data.op[, abscissa])\nRun Code Online (Sandbox Code Playgroud)\n\n但输出是:
\n\n # A tibble: 15 x 0\nRun Code Online (Sandbox Code Playgroud)\n\n我也尝试data.op[, abscissa] %>% diff过并且data.op %>% select(abscissa) %>% diff获得相同的零列结果。
但是,如果我这样做
\n\ndiff(as.data.frame(data.op)[, abscissa])\nRun Code Online (Sandbox Code Playgroud)\n\n有用:
\n\n[1] -0.00169560 0.00024120 …Run Code Online (Sandbox Code Playgroud)