【问题标题】:Selectively alter a column in one data.table based on multiple conditions in another data.table of different dimensions根据不同维度的另一个data.table中的多个条件选择性地更改一个data.table中的列
【发布时间】:2020-12-23 02:24:51
【问题描述】:

例子:

Trade <- data.table (
  Ticker = c("ABC", "DEF", "GHI", "GHI", "JKL", "JKL", "MNO"),
  TPrice = c(100, 200, 300, 305, 400, 405, 500),
  Code = c("O", "O", "O", "C", "O", "C", "C")
)

MTM <- data.table (
  Ticker = c("ABC", "DEF", "GHI", "JKL", "MNO"), 
  Flag = c(1, 0, 0, 1, 1), 
  TPrice = 0L
)

我希望 MTM data.table 中的 TPrice 只有在 Trade 和 MTM data.tables 中显示的相同代码具有 1 标志(在 MTM data.table 中)和代码是“O”(在贸易数据表中)。当满足这些条件时,MTM TPrice 列中的结果条目是 Trade data.table 中的 TPrice。

我正在寻找的结果:

MTM <- data.table (
  Ticker = c("ABC", "DEF", "GHI", "JKL", "MNO"), 
  Flag = c(1, 0, 0, 1, 1), 
  TPrice = c(100, 0, 0, 400, 0)
)

    Ticker Flag TPrice
1:    ABC    1    100
2:    DEF    0      0
3:    GHI    0      0
4:    JKL    1    400
5:    MNO    1      0

咨询过的帖子

要么问题不一样,通常是因为我的数据表维度不均匀,要么我无法根据我的问题调整答案(仍在学习 R),或者我只是不理解尝试调整的答案(我在评论部分提出问题):

Subset a data frame based on another

How extract values of a data.table based on multiple conditions?

Update data.table based on multiple columns and conditions

Efficient way to subset data.table based on value in any of selected columns

How can one work fully generically in data.table in R with column names in variables

Multiple variable filters in r

Filter data.table on same condition for multiple columns

R Data.table divide values in column based on another column

由于问题中提出的尺寸不均匀,最后一个 SO 帖子似乎最接近我的问题,但我无法根据我的问题调整解决方案。

我非常感谢这里的一些帮助。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    您可以连接两个数据框,然后检查Ticker 的每个值的条件。

    library(data.table)
    
    Trade[MTM, on = 'Ticker'][, .(Tprice = if(any(Code == 'O' & Flag == 1)) 
               TPrice[Code == 'O' & Flag == 1] else 0), .(Ticker, Flag)]
    
    #   Ticker Flag Tprice
    #1:    ABC    1    100
    #2:    DEF    0      0
    #3:    GHI    0      0
    #4:    JKL    1    400
    #5:    MNO    1      0
    

    【讨论】:

    • 谢谢;再来一杯咖啡! (您也回答了之前的问题)。这行得通,但我一直在试图理解它为什么行得通,这导致了一些问题,其中最重要的是这里“第一”的作用。上一个术语不是将选择的 Tprices 限制为仅与 Code 等于“O”和 Flag 等于 1 相关联的那些吗?
    • 好的..在再次查看答案时,我才意识到它不应该是first,而是满足条件的TPrice 值。我已经更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多