假设我在 R 中有一个名为 df 的数据框,其列如下:
id, start_period, end_period, store_value, shop_items, in_bank, owed_money, prefix_store_value, prefix_shop_items, prefix_in_bank, prefix_owed_money, val_BP_to_x, val_SR_to_x.
我还有一个名为“columns_for_change”的向量,它由数据框列的子集(df 的数字列,id 除外)组成,df,即,
columns_for_change <- c(store_value, shop_items, in_bank, owed_money).
创建该数据框的 R 代码和数据框的屏幕截图如下:
df <- data.frame(id=c(1,2,3),
start_period=c("03/04/2020","23/04/2020","12/04/2020"),
end_period=c("03/04/2021","23/04/2021","12/04/2021"),
store_value=c(100,390,470),
shop_items=c(208,807,550),
in_bank=c(450,5000,8000),
owed_money=c(759,979,605),
prefix_store_value=c("GD","GD","SR"),
prefix_shop_items=c("GD","GD","GD"),
prefix_in_bank=c("BP","GD","GD"),
prefix_owed_money=c("GD","GD","GD"),
val_BP_to_x=c(0.86,0.97,0.83),
val_SR_to_x=c(0.99,0.89,0.87))
现在我想做的是,对于向量“columns_for_change”中给出的所有列名,根据其前缀值将其乘以最后两列中给出的相应条目,转换每个列下给出的值。更清楚地说,我想要的是,如果对应于向量中每个项目的前缀列条目是“BP”或“SR”,则分别将列值乘以 val_BP_to_x 或 val_SR_to_x 中给出的乘数。否则,如果前缀条目是“GD”,那么我想保留相应的条目而不相乘。例如,因为id 1第一行的prefix_in_bank列条目是“BP”,我想将in_bank列中给出的对应条目,原来是450改为450 * 0.86 = 387,即df[ 1,c("in_bank")] = df[1,c("in_bank")] * df[1,c("val_BP_to_x")]。我该如何实现?非常感谢任何帮助,并提前致谢。