0

示例数据文件(csv 格式)

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 并没有帮助(只会抛出丢失的 dplyr 错误)。

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

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

testdf2 <- data.frame(Name, Date)

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

它工作正常。但我不知道如何解决这种“腐败”。

4

1 回答 1

2

我还没有更新“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

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

于 2015-08-24T03:30:53.137 回答