【问题标题】:how to return specific output related to conditions being met in, using R data table如何使用 R 数据表返回与满足的条件相关的特定输出
【发布时间】:2020-06-15 03:17:37
【问题描述】:

我正在尝试使用数据表包。我想找到一种方法来根据与计算相关的 3 个变量中的特定条件创建新列。

#this is my dataset  
dput(dt[1:5])
structure(list(cashtype = c("", "", "", "", ""), quantity = c(1200000, 
1400000, 2400000, 2500000, 810000), price_mid = c(100.0385, 102.5583, 
92.7059, 108.515, 113.8505), value_mid = c(1200462.3, 1189302.74, 
2224941.6, 2712875, 922189.41), currency_price = c("GBP", "EUR", 
"GBP", "GBP", "GBP"), currency_value = c("GBP", "GBP", "GBP", 
"GBP", "GBP")), class = c("data.table", "data.frame"), row.names = c(NA, 
-5L), .internal.selfref = <pointer: 0x15f28c0>)`

我需要检查这个大型数据集的计算。并不是所有的数字加起来。但我有办法检查。这是“value_mid”列除以“quantity”乘以 100。这应该加起来到 price_mid 列。使用列有效检查。在此之后,我想理想地将“有效”观察结果转换为与“price_mid”匹配的“真”,而那些不匹配“假”的观察结果。

dt[,valid:= (value_mid/quantity)*100]

我不确定如何在数据表中使用 ifelse 函数。发现它令人困惑。谢谢

【问题讨论】:

    标签: r if-statement datatable


    【解决方案1】:

    这就是你要找的吗?

    dt[,valid := price_mid == (value_mid/quantity)*100][]
       cashtype quantity price_mid value_mid currency_price currency_value valid
    1:           1200000  100.0385 1200462.3            GBP            GBP FALSE
    2:           1400000  102.5583 1189302.7            EUR            GBP FALSE
    3:           2400000   92.7059 2224941.6            GBP            GBP FALSE
    4:           2500000  108.5150 2712875.0            GBP            GBP  TRUE
    5:            810000  113.8505  922189.4            GBP            GBP FALSE
    

    要解决舍入问题,您可以尝试使用round:

    dt[,valid := round(price_mid,4) == round((value_mid/quantity)*100,4)][]
       cashtype quantity price_mid value_mid currency_price currency_value valid
    1:           1200000  100.0385 1200462.3            GBP            GBP  TRUE
    2:           1400000  102.5583 1189302.7            EUR            GBP FALSE
    3:           2400000   92.7059 2224941.6            GBP            GBP  TRUE
    4:           2500000  108.5150 2712875.0            GBP            GBP  TRUE
    5:            810000  113.8505  922189.4            GBP            GBP  TRUE
    

    【讨论】:

    • 感谢您的回复。它工作正常。我的问题是 R 将有效数字四舍五入。如果您在计算器中执行操作(值/数量然后 *100),您应该得到 100.038525。但R轮。我将如何解决这个问题?因为在某些情况下它应该为真时却是假的。谢谢。
    • 完美运行@IanCampbell。你就是那个人。谢谢
    • 嗨,和以前的问题非常相似。计算器中的一些值被四舍五入,因为仍然是假的。任何更多潜在的建议非常感谢
    猜你喜欢
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2022-01-14
    • 2018-05-04
    • 1970-01-01
    相关资源
    最近更新 更多