【问题标题】:R not producing the same result when the data set source is changed更改数据集源时,R不会产生相同的结果
【发布时间】: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 包含这些公司的变体名称

请帮忙!

【问题讨论】:

  • 我们需要查看/能够将您的 df1df2 的子集上传到我们的 R 会话中,以探索您的 dput 数据与实际数据之间的差异。如您所见,CompanyName 的内容似乎有问题。
  • @mysteRious DF1 包含 google、IBM 等公司的列表,DF2 包含 Google Inc、Google Maps、IBM inc、IBM iNvestmets 等公司的变体名称。

标签: r


【解决方案1】:

从 CSV 导入可能很棘手。查看默认分隔符(逗号)是否特别适用于您的文件。如果没有,您可以通过将sep 参数设置为有效的字符来更改它。 (例如:read.csv(file_path, sep = ";") 由于我们当地的惯例,这在我的国家是一个常见问题。

事实上,如果您的标准是分号,read.csv2(file_path) 就足够了。

而且(为了避免进一步的麻烦)csv 会混淆带有十进制值的列是很常见的,因为这里我们使用逗号作为小数分隔符而不是点。因此,值得在您的文件中检查这是否也是问题,在任何其他列中。

如果是这种情况,您可以通过设置 dec = ","read.csvread.csv2 中设置适当的参数(例如:read.csv(file_path, sep = ";", dec = ",")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2014-07-20
    • 1970-01-01
    相关资源
    最近更新 更多