【问题标题】:Create a new column based on formula involving other column根据涉及其他列的公式创建新列
【发布时间】:2019-09-02 04:04:27
【问题描述】:

首先,我想根据列“类型”(1 : 5) 定义的产品类型创建一个名为“总价”的新列。数据如下所示:

df <- data.frame('type'=c(1,2,3,4,5), 'quantity'=c(1,20,3,4,50))
df
  type quantity
1   1    1         
2   2   20
3   3    3
4   4    4
5   5   50

总价可以通过每个产品的数量乘以相应的价格来计算:

***每种产品的价格:Type 1 - $10; 2 型 - 20 美元;3 型 - 30 美元;4 型 - 40 美元;5 型 - 50 美元

所以我希望看起来像这样:

       type quantity totalprice
    1   1    1           10
    2   2   20          400
    3   3    3           90
    4   4    4          160
    5   5   50         2500

然后,我需要将这个新创建的列与原始数据作为最后一列加入。

我猜伪代码看起来像这样:

Part 1)
if df$type == "1" , totalprice = df$quantity * 10,
if df$type == "2", totalprice = df$quantity * 20,
if df$type == "3", totalprice = df$quantity * 30,
if df$type == "4", totalprice = df$quantity * 40

Part2)
Collect these values in a column called totalprice and join it to df.

非常感谢您的帮助。

【问题讨论】:

  • 能否给出预期结果表?以及对应的价格是多少??
  • 你好 Juhyeon,我已经更新了预期结果表(最后一列)。谢谢
  • 您需要使用df2$typedf2$multiplyer 添加第二个数据框。

标签: r data-cleaning


【解决方案1】:

我同意@Elin,创建一个包含所有类型及其对应price 的参考数据框。 merge 将它与你原来的 df 乘以 "type" 然后乘以 quantity * price

ref_data <- data.frame(type = 1:5, price = c(10, 20, 30, 40, 50))
transform(merge(df, ref_data, by = "type"), totalprice = quantity * price)

#  type quantity price totalprice
#1    1        1    10         10
#2    2       20    20        400
#3    3        3    30         90
#4    4        4    40        160
#5    5       50    50       2500

dplyr,你可以这样做

library(dplyr)
inner_join(df, ref_data, by = "type") %>%
    mutate(totalprice = quantity * price)

【讨论】:

    【解决方案2】:

    我建议只添加一个与type 对应的乘数列,然后使用它来生成总价:

    df$multiplier <- 10
    df$totalprice <- df$multiplier * df$quantity
    

    【讨论】:

    • 嗨蒂姆,感谢您的回答。挑战在于,在乘以数量之前,价格应该取决于产品类型。有什么好的方法吗?谢谢
    • 对于所有类型,您的乘数似乎只是一个固定值 10。我错过了什么吗?
    • 嗨蒂姆,每种产品的价格都不同:类型 1 - 10; 2-20型;3-30型;4-40型;5-50型
    • 您的预期结果始终是 type*quantity*10 ...请提供一个更完整的示例来证明这不是真的(或者不要使乘数与类型匹配)。
    【解决方案3】:

    如果对应的价格有严格的规则(类型X 10),可以通过这段代码生成:

    require(dplyr)
    df %>%
      mutate(price = type * 10,
             totalprice = quantity * price)
    

    df 有更多行吗?还是没有价格规则?

    【讨论】:

    • 您好 Juhyeon,感谢您的回答。由于不同产品的价格不同,有没有办法同时考虑不同的条件(产品类型)?
    • 我很抱歉。我不能完全理解你的想法。你能举个例子吗?
    • 也许我的解释不清楚。我的意思是每种产品的价格都不同:类型 1 - 10 美元; 2 型 - 20 美元;3 型 - 30 美元;4 型 - 40 美元;5 型 - 50 美元。例如,如果产品类型为 1,则 1 件的价格为 10 美元,则 1 的总价为 10 美元;如果产品类型为2,则1个单位的价格为20美元,其中20个的总价格为400美元;如果产品的类型是 3,1 件的价格是 30 美元,其中 3 件的总价是 90 美元......我希望这更清楚
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多