【发布时间】:2018-04-16 13:13:19
【问题描述】:
如果我手动创建 2 个 DF,那么代码会按照预期执行:
`df1 <- structure(list(CompanyName = c("Google", "Tesco")), .Names = "CompanyName", class = "data.frame", row.names = c(NA, -2L))
df2 <- structure(list(CompanyVariationsNames = c("google plc", "tesco bank","tesco insurance", "google finance", "google play")), .Names = "CompanyVariationsNames", class = "data.frame", row.names = c(NA, -5L))-5L))
`
test <- df2 %>%
rowwise() %>%
mutate(CompanyName = as.character(Filter(length,
lapply(df1$CompanyName, function(x) x[grepl(x, CompanyVariationsNames, ignore.case=T)])))) %>%
group_by(CompanyName) %>%
summarise(Variation = paste(CompanyVariationsNames, collapse=",")) %>%
cSplit("Variation", ",")
这会产生以下结果:
CompanyName Variation_1 Variation_2 Variation_3
1: Google google plc google finance google play
2: Tesco tesco bank tesco insurance NA
但是.....如果我导入一个数据集(使用 read.csv)然后我得到以下错误Error in mutate_impl(.data, dots) : Column CompanyName must be length 1 (the group size), not 0。我的数据集相当大,所以df1 将有 1000 行,df2 将有 54k 行。
手动创建数据集时代码有效而导入数据时无效的具体原因是什么?
DF1 包含公司名称,DF2 包含这些公司的变体名称
请帮忙!
【问题讨论】:
-
我们需要查看/能够将您的
df1和df2的子集上传到我们的 R 会话中,以探索您的dput数据与实际数据之间的差异。如您所见,CompanyName的内容似乎有问题。 -
@mysteRious DF1 包含 google、IBM 等公司的列表,DF2 包含 Google Inc、Google Maps、IBM inc、IBM iNvestmets 等公司的变体名称。
标签: r