根据另一列中的值有条件地更改列值

时间:2017-12-21 17:33:02

标签: r function conditional

我在R中有一个数据集,结构如下:

> head(top10_master, n = 5)
   sensitivity      PRODUCT NewRevenue NewQuantity NewProfit Change_Price Rev_Change Prof_Change Quant_Change Revenue Quantity  Profit
1:           1 PRODUCT33411    7067750    11809634   5790148      0.80000  1.2282115    1.173265    1.5591315 5754505  7574495 4935074
2:           1 PRODUCT35481    4484178     5721789   3278738      1.04978  1.0000000    1.000000    1.0000000 4484178  5721789 3278738
3:           1 PRODUCT26835    5239519     2239783   3950871      0.90000  1.1801825    1.125136    1.3884444 4439584  1613160 3511460
4:           1 PRODUCT33203    5872765     1139270   3125781      0.90000  1.3477930    1.161484    1.6487265 4357320   691000 2691195
5:           1 PRODUCT22426    4125707     1121494   3249458      0.80000  0.9590297    1.378040    0.4507613 4301960  2488000 2358029

我正在尝试在Change_Price的实例中将Rev_Change and Quant_Change columns == 1列编辑为1(在函数内部)。我已经尝试了我能找到的所有方法,包括使用dplyr,但由于某些原因,这些方法都没有工作,输出总是相同的。请帮忙。

我尝试了太多方法来列出所有方法,但其中列出了in this post列出的所有方法。出于某种原因,这些方法都不起作用。

2 个答案:

答案 0 :(得分:0)

正如akrun所说,也许有floating point accuracy issue。您可以尝试使用dplyr' near

  

这是一种比较浮点数的两个向量是否(成对)相等的安全方法。这比使用==更安全,因为它具有内置容差。

这可能对您有用:

library(dplyr)
top10_master$Change_Price[which(near(top10_master$Rev_Change, 1) & near(top10_master$Quant_Change, 1))] <- 1

答案 1 :(得分:-1)

top10_master$Change_Price[sapply(top10_master$Rev_Change, all.equal, 1) & sapply(top10_master$Quant_Change, all.equal, 1)] <- 1

要更改的数据的子集,然后分配。

相关问题