我有一个包含以下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)
我通过附加数据集
得到此错误以下对象由 .GlobalEnv屏蔽: 活动 从df(pos = 3)屏蔽以下对象: 活动,国家/地区,Customer_Group,CustomerID
此外,当我继续时,我收到以下错误:“要替换的项目数不是更换长度的倍数”
当我手动检查新创建的列Total_Sales时,大多数值都不正确(不是所需的结果)。我做错了什么,拜托?我需要你的帮助。
感谢。
答案 0 :(得分:0)
这不是错误,而是警告,让您知道attach
正在做什么。您已将“活动”指定为独立向量,但它也是您要附加的数据框中的列。当您附加数据框时,R必须在您刚刚创建的向量和列之间进行选择,因为它们现在都具有相同的名称。
发生此错误是因为您没有比较相等长度的矢量。在这些行的左侧,您有数据帧的行的子集。然而,在右侧,您只是转换整个活动向量。这些长度不等,所以R不知道如何处理它们。
如果删除attach()
和detach()
行并将代码更改为这样的行,则脚本运行正常:
df$Total_Sales[df$Customer_Group == 1] <- ((0.511 * as.numeric(gsub(",", "", df$Activity)[df$Customer_Group == 1])) - 50)