根据另一列中的值有条件地更改列值
Conditionally change column value based on value in another column
我在 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
我试图在 Rev_Change and Quant_Change columns == 1
的实例中将 Change_Price
列编辑为 1(函数内部)。我已经尝试了我能找到的所有方法,包括使用 dplyr
,但由于某些原因,这些方法中的 none 有效并且输出始终相同。请帮忙。
我尝试了太多的方法,无法一一列举,但in this post列出的所有方法都在其中。出于某种原因,这些方法中的 none 有效。
top10_master$Change_Price[sapply(top10_master$Rev_Change, all.equal, 1) & sapply(top10_master$Quant_Change, all.equal, 1)] <- 1
子集到您要更改的数据,然后分配。
正如 akrun 所建议的,也许有 floating point accuracy issue. You could try using dplyr's near
:
This is a safe way of comparing if two vectors of floating point numbers are (pairwise) equal. This is safer than using ==, because it has a built in tolerance.
这可能对你有用:
library(dplyr)
top10_master$Change_Price[which(near(top10_master$Rev_Change, 1) & near(top10_master$Quant_Change, 1))] <- 1
我在 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
我试图在 Rev_Change and Quant_Change columns == 1
的实例中将 Change_Price
列编辑为 1(函数内部)。我已经尝试了我能找到的所有方法,包括使用 dplyr
,但由于某些原因,这些方法中的 none 有效并且输出始终相同。请帮忙。
我尝试了太多的方法,无法一一列举,但in this post列出的所有方法都在其中。出于某种原因,这些方法中的 none 有效。
top10_master$Change_Price[sapply(top10_master$Rev_Change, all.equal, 1) & sapply(top10_master$Quant_Change, all.equal, 1)] <- 1
子集到您要更改的数据,然后分配。
正如 akrun 所建议的,也许有 floating point accuracy issue. You could try using dplyr's near
:
This is a safe way of comparing if two vectors of floating point numbers are (pairwise) equal. This is safer than using ==, because it has a built in tolerance.
这可能对你有用:
library(dplyr)
top10_master$Change_Price[which(near(top10_master$Rev_Change, 1) & near(top10_master$Quant_Change, 1))] <- 1