【问题标题】:If-else Statements using a csv file使用 csv 文件的 if-else 语句
【发布时间】:2015-11-25 20:20:47
【问题描述】:

我在使用 csv 文件并将其集成到我的代码中时遇到问题。

例如:假设我有一个大数据集,让我们将其命名为数据,其中 1000 行只是随机颜色,列行命名为颜色。

此外,我还有另一个数据集,我们将其命名为second,有两列:IfThen。假设 If 列包含一些随机颜色,then 是一个数字。

我希望代码将data$colors 替换为then 列中的数字。

为什么

ifelse(data$colors == second$If, data$colors == second$then, data$colors == data$colors)

不工作?

【问题讨论】:

  • 因为你需要%in% 而不是==。你可以写with(data, ifelse(colors %in% second$If, second$then, colors))
  • 另外,您的代码只不过是使用== 进行的测试,它将始终返回 TRUE 或 FALSE。在我看来,你应该先将merge 你的data 改为second,然后写一个ifelse 声明。

标签: r shiny


【解决方案1】:

ifelse(data$colors == second$If, data$colors == second$then, data$colors == data$colors) 不能“工作”可能有两个原因。内部原因是“==”函数不是对集合包含的测试,而是一个矢量化函数,它可能不会成功匹配两个不同数据帧的列中的值。正如理查德评论中提到的那样,您可能确实想使用%in%。但可能更重要的是,您没有将 ifelse 函数的值分配给任何东西。 (并且 ifelse 不会在结果表达式和备用表达式中进行赋值。R 是一种函数式语言。当您将值分配给对象时,您实际上只会执行有用的操作。您会改为执行以下操作:

 data$colors[ data$colors %in% second$If] <-  second$then[ match( data$colors, second$If) ]

这会将data$colors 的任何值替换为seconds$then 的值,该值由data$colors 值在second$If 向量中的位置向量索引。

(至少这是我认为应该发生的事情。你没有提供测试数据,我们这里的许多人认为这是你的责任,而不是我们的责任。所以这个理论未经我的逻辑或句法错误测试。互联网标准保修建议:如果它坏了,你可以保留所有的碎片。)

【讨论】:

  • 您好,很遗憾,由于工作相关问题,我无法提供示例数据集。但是,我使用您的代码行收到错误“要替换的项目数不是替换长度的倍数”。有什么想法吗?
  • 声称“与工作有关的事项”阻止了示例的构建是没有说服力的。更改所有列名并模糊所有数据,然后使用dput() 发布。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 2017-02-05
  • 2018-01-27
  • 2015-07-06
  • 2012-08-05
相关资源
最近更新 更多