加载 splitstackshape/data.frame 和 tidyr/dplyr 时出现错误 运行 cSplit

Error running cSplit when splitstackshape/data.frame and tidyr/dplyr are loaded

Example data file (csv format)

testdf <- read.csv("example.csv")

我正在尝试自动化一些花名册挖掘。有一次我需要根据带有分隔符的名称拆分行,因此来自 splitstackshape 的 cSplit 是完美的。我还在拆分之前和之后进行了一堆 dplyr 数据整形。

加载的库:

library(data.table)
library(splitstackshape)
library(tidyr)
library(dplyr)

问题是当我在 data.frame 之后加载 dplyr 时,我收到以下消息:

Attaching package: ‘dplyr’

The following objects are masked from ‘package:data.table’:

    between, last

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union

然后当我尝试使用 cSplit 时:

test <- cSplit(testdf, "Registrar", "/", direction = "long")

我收到这个错误:

Error in `[.tbl_df`(indt, , splitCols, with = FALSE) : 
  unused argument (with = FALSE)

我已经尝试了各种排列组合——只有当 data.frame 和 dplyr 都被加载(以任一顺序)时才会出现此错误,并且在没有 dplyr 的情况下重新启动 R 或从不加载它会使 cSplit 正常工作。

虽然我需要能够同时使用两者,但分离 dplyr 没有帮助(只会抛出 missing dplyr 错误)。

我已经看到 但他们似乎得出数据已损坏的结论。这似乎很可能,因为如果我 运行 在玩具数据集上,

Name <- "Bo / Ashley"
Date <- "2015-02-04"

testdf2 <- data.frame(Name, Date)

testtoy <- cSplit(testdf2, "Name", "/", direction = "long")

它工作正常。但我不知道如何解决这个 "corruption".

我还没有更新 "splitstackshape" 中的函数来处理 tbl_df 对象。因此,当前的解决方法是在您的链中添加 data.frame

比较:

library(splitstackshape)
library(dplyr)

CT <- tbl_df(head(concat.test))

CT %>% cSplit("Likes")
# Error in `[.tbl_df`(indt, , splitCols, with = FALSE) : 
#   unused argument (with = FALSE)

CT %>% data.frame %>% cSplit("Likes")
#      Name                   Siblings    Hates Likes_1 Likes_2 Likes_3 Likes_4 Likes_5
# 1:   Boyd Reynolds , Albert , Ortega     2;4;       1       2       4       5       6
# 2:  Rufus  Cohen , Bert , Montgomery 1;2;3;4;       1       2       4       5       6
# 3:   Dana                     Pierce       2;       1       2       4       5       6
# 4: Carole Colon , Michelle , Ballard     1;4;       1       2       4       5       6
# 5: Ramona           Snyder , Joann ,   1;2;3;       1       2       5       6      NA
# 6: Kelley          James , Roxanne ,     1;4;       1       2       5       6      NA

或者,由于 with = FALSE 是在 "data.table" 中使用的参数,您可以使用 tbl_dt 而不是 tbl_df 对象:

CT2 <- tbl_dt(head(concat.test))

CT2 %>% cSplit("Likes")
#      Name                   Siblings    Hates Likes_1 Likes_2 Likes_3 Likes_4 Likes_5
# 1:   Boyd Reynolds , Albert , Ortega     2;4;       1       2       4       5       6
# 2:  Rufus  Cohen , Bert , Montgomery 1;2;3;4;       1       2       4       5       6
# 3:   Dana                     Pierce       2;       1       2       4       5       6
# 4: Carole Colon , Michelle , Ballard     1;4;       1       2       4       5       6
# 5: Ramona           Snyder , Joann ,   1;2;3;       1       2       5       6      NA
# 6: Kelley          James , Roxanne ,     1;4;       1       2       5       6      NA

当然,如果有人创建了解决问题的拉取请求,我会非常乐意进行相关更新:-)