在 R 编程语言中以矢量化方式改变数据帧

问题描述 投票:0回答:0

假设我在 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")]。我该如何实现?非常感谢任何帮助,并提前致谢。

r dataframe dplyr mutate
© www.soinside.com 2019 - 2024. All rights reserved.