如果我手动创建了2个DFs,那么代码将完成它想要做的事情:
`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包含这些公司的不同名称。
救命啊!
发布于 2018-04-16 13:49:41
从CSV导入可能很棘手。查看默认分隔符(逗号)是否特别适用于您的文件。如果没有,可以通过将sep参数设置为一个工作的字符来更改它。(例如:由于我们的地方会议,read.csv(file_path, sep = ";")在我国是一个常见的问题。
实际上,如果您的标准是分号,read.csv2(file_path)就足够了。
而且(为了避免进一步的麻烦) csv使用十进制值的列是很常见的,因为这里我们使用逗号作为小数分隔符而不是点。因此,在其他列中,这是否也是您的文件中的一个问题,这是值得检查的。
如果是这样,则可以通过设置read.csv (例如:read.csv(file_path, sep = ";", dec = ","))在dec = ","或read.csv2中设置适当的参数。
https://stackoverflow.com/questions/49858239
复制相似问题