【问题标题】:Comparing Each Element of Two Lists in R比较 R 中两个列表的每个元素
【发布时间】:2014-04-16 16:36:55
【问题描述】:

我在 R 中有一个数据集,其结构如下:

data <- structure(list(Cust_ID = c("003", "023", "023", "023", "023", 
"041", "056", "056"), Record_Date = list(structure(16130, class = "Date"), 
    structure(c(16130, 16130, 16130, 16130), class = "Date"), 
    structure(c(16150, 16150, 16150, 16150), class = "Date"), 
    structure(c(16161, 16161, 16161, 16161), class = "Date"), 
    structure(c(16162, 16162, 16162, 16162), class = "Date"), 
    structure(16133, class = "Date"), structure(c(16088, 16088
    ), class = "Date"), structure(c(16095, 16095), class = "Date")), 
    Compare_Date = list(structure(16130, class = "Date"), structure(c(16130, 
    16150, 16161, 16162), class = "Date"), structure(c(16130, 
    16150, 16161, 16162), class = "Date"), structure(c(16130, 
    16150, 16161, 16162), class = "Date"), structure(c(16130, 
    16150, 16161, 16162), class = "Date"), structure(16133, class = "Date"), 
        structure(c(16088, 16095), class = "Date"), structure(c(16088, 
        16095), class = "Date"))), row.names = c(NA, -8L), class = "data.frame", .Names = c("Cust_ID", 
"Record_Date", "Compare_Date"))

  Cust_ID                Record_Date               Compare_Date
1     003                      16130                      16130
2     023 16130, 16130, 16130, 16130 16130, 16150, 16161, 16162
3     023 16150, 16150, 16150, 16150 16130, 16150, 16161, 16162
4     023 16161, 16161, 16161, 16161 16130, 16150, 16161, 16162
5     023 16162, 16162, 16162, 16162 16130, 16150, 16161, 16162
6     041                      16133                      16133
7     056               16088, 16088               16088, 16095
8     056               16095, 16095               16088, 16095

我想比较“Record_Date”的每个元素和“Compare_Date”的每个元素。我希望结果等于“Compare_Date”在“Record_Date”之后的 14 天内的次数。我知道如何比较两个向量,但比较两个列表似乎给我带来了麻烦。我尝试过使用 lapply 或 sapply,但它们一次只能循环遍历一个列表。

有没有人可以轻松解决这个问题?我希望预期的输出如下所示:

   Within14
1:        0
2:        2
3:        1
4:        0
5:        1
6:        0
7:        0
8:        0

【问题讨论】:

  • 预期结果会是什么样子?如何进行比较?

标签: r list sapply


【解决方案1】:

也许,您正在寻找mapply。您可以编辑 mapplyFUN 参数以对每个 RDCD 参数执行您想要的操作。

mapply 分别将data$Record_Datedata$Compare_Date 中的一个元素传递给FUNRDCD 参数。

mapply(FUN = function(RD, CD) {
    d <- as.numeric(CD - RD)
    sum(d > 0 & d < 15)
}, RD = data$Record_Date, CD = data$Compare_Date)
## [1] 0 0 2 1 0 0 1 0

【讨论】:

  • 很好的答案!非常感谢!
  • @Mike.Gahan 如果它很棒,那么你应该勾选它。
  • 对不起......这里有点新手。现在全部检查
猜你喜欢
  • 2019-12-07
  • 2020-07-04
  • 2019-03-06
  • 1970-01-01
  • 2015-11-06
  • 2014-01-07
  • 2017-05-11
相关资源
最近更新 更多