如何将数学表达式的值插入到R中的Column中

时间:2017-09-12 07:49:42

标签: r

我有一个包含以下4种列类型的数据集,请参阅下面数据框的结构

>str(df)
 >data.frame':  108517 obs. of  4 variables:
 >$ CustomerID: int  1 2 3 4 5 6 7 8 9 10 ...
 >$ Activity: chr  " 418 " " 2 " " 1,868 " " 6,319 " ...
 >$ Country : chr  "Germany" "Germany" "England" "Belgium" ...
 >$ Customer_Group   : int  1 4 3 5 5 5 2 1 1 3 ...

我想创建第五列,并在每个客户的“总销售额”列中填写

(Total_Sales通常通过将客户活动乘以0.511而减去基于客户群的折扣级别计算得出)

我的代码在

下面
>Activity <- as.integer(gsub(",", "", df$Activity))
>attach(df)
>df$Total_Sales[df$Customer_Group == 1] <- ((0.511 * Activity) - 50)
>df$Total_Sales[df$Customer_Group == 2] <- ((0.511 * Activity) - 65)
>df$Total_Sales[df$Customer_Group == 3] <- ((0.511 * Activity) - 20)
>df$Total_Sales[df$Customer_Group == 4] <- ((0.511 * Activity) - 35)
>df$Total_Sales[df$Customer_Group == 5] <- ((0.511 * Activity) - 0)
>detach(df)
  1. 我通过附加数据集

    得到此错误
      

    以下对象由 .GlobalEnv屏蔽:   活动   从df(pos = 3)屏蔽以下对象:   活动,国家/地区,Customer_Group,CustomerID

  2. 此外,当我继续时,我收到以下错误:“要替换的项目数不是更换长度的倍数”

  3. 当我手动检查新创建的列Total_Sales时,大多数值都不正确(不是所需的结果)。我做错了什么,拜托?我需要你的帮助。

    感谢。

1 个答案:

答案 0 :(得分:0)

  1. 这不是错误,而是警告,让您知道attach正在做什么。您已将“活动”指定为独立向量,但它也是您要附加的数据框中的列。当您附加数据框时,R必须在您刚刚创建的向量和列之间进行选择,因为它们现在都具有相同的名称。

  2. 发生此错误是因为您没有比较相等长度的矢量。在这些行的左侧,您有数据帧的行的子集。然而,在右侧,您只是转换整个活动向量。这些长度不等,所以R不知道如何处理它们。

  3. 如果删除attach()detach()行并将代码更改为这样的行,则脚本运行正常:

    df$Total_Sales[df$Customer_Group == 1] <- ((0.511 * as.numeric(gsub(",", "", df$Activity)[df$Customer_Group == 1])) - 50)