如果我手动创建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包含这些公司的变体名称
请帮忙!答案 0 :(得分:0)
从CSV导入可能会非常棘手。查看默认分隔符(逗号)是否特别适用于您的文件。如果没有,您可以通过将sep
参数设置为有效的字符来更改它。 (例如:read.csv(file_path, sep = ";")
由于我们当地的惯例,这是我国的一个共同问题。
事实上,如果您的标准是分号,read.csv2(file_path)
就足够了。
而且(为了避免进一步的麻烦)csv混乱使用十进制值的列是非常普遍的,因为这里我们使用逗号作为十进制分隔符而不是点。因此,在任何其他列中检查这是否也是您文件中的问题是值得的。
如果是这种情况,您可以通过设置read.csv
(例如read.csv2
)
dec = ","
或read.csv(file_path, sep = ";", dec = ",")
设置适当的参数