当数据集源更改时,R不会产生相同的结果

时间:2018-04-16 13:13:19

标签: r

如果我手动创建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包含这些公司的变体名称

请帮忙!

1 个答案:

答案 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 = ",")设置适当的参数